Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[PL] Jak NIE zostać "programistą" PHP?

3a453374a79becf33b3a6659389a56c4?s=47 Radek Benkel
December 18, 2011

[PL] Jak NIE zostać "programistą" PHP?

3a453374a79becf33b3a6659389a56c4?s=128

Radek Benkel

December 18, 2011
Tweet

More Decks by Radek Benkel

Other Decks in Technology

Transcript

  1. JAK NIE ZOSTAĆ „PROGRAMISTĄ” PHP? DOBRE I ZŁE PRAKTYKI

  2. O MNIE Radosław Benkel - singles PHP - 2007 SQL

    - 2007 JavaScript -2008 Projekty: DELIRIUM, GENOSIS, inne
  3. PHP CZYM JEST PHP?

  4. PHP CZYM JEST PHP? DYNAMICZNIE TYPOWANYM, OBIEKTOWYM, SKRYPTOWYM JĘZYKIEM PROGRAMOWANIA

  5. JAKA JEST NAJWIĘKSZA WADA A JEDNOCZEŚNIE ZALETA PHP?

  6. None
  7. <?PHP

  8. None
  9. None
  10. HTTP://WWW.FLICKR.COM/PHOTOS/HATM/3448824312/ BY HATM

  11. WYŚWIETLANIE BŁĘDÓW

  12. WYŚWIETLANIE BŁĘDÓW

  13. WYŚWIETLANIE BŁĘDÓW php.ini error_reporting = E_ALL | E_STRICT display_errors =

    On
  14. WYŚWIETLANIE BŁĘDÓW php.ini error_reporting = E_ALL | E_STRICT display_errors =

    On *.php <?php error_reporting(E_ALL | E_STRICT) ini_set('display_errors', 'On')
  15. WYŚWIETLANIE BŁĘDÓW php.ini error_reporting = E_ALL | E_STRICT display_errors =

    On *.php <?php error_reporting(E_ALL | E_STRICT) ini_set('display_errors', 'On') .htaccess php_flag display_errors on php_value error_reporting 32767
  16. WYŚWIETLANIE BŁĘDÓW @

  17. INNE DYREKTYWY PHP.INI

  18. INNE DYREKTYWY PHP.INI register_globals = Off

  19. INNE DYREKTYWY PHP.INI <?php //register_globals = On $title // 'Foo'

    $_GET['title'] // 'Foo' //register_globals = Off $title // undefined $_GET['title'] // 'Foo' http://www.example.com/find.php?title=Foo
  20. INNE DYREKTYWY PHP.INI register_globals = Off magic_quotes_gpc = Off

  21. INNE DYREKTYWY PHP.INI register_globals = Off magic_quotes_gpc = Off magic_quotes_runtime

    = Off
  22. GET, POST [, PUT, DELETE]

  23. GET, POST [,PUT, DELETE] HTTP://EXAMPLE.COM/INDEX.PHP?ID=123&TITLE=FOO HTTP://WWW.ONET.TV/JUSTIN-BIEBER-TRAFI-NA-ODWYK, 9025126,1,KLIP.HTML# $_GET

  24. FILTROWANIE WEJŚCIA I WYJŚĆIA

  25. FILTROWANIE WEJŚCIA I WYJŚCIA <?php $search_html = filter_input( INPUT_GET, 'foo',

    FILTER_SANITIZE_SPECIAL_CHARS ); WEJŚCIE: WYJŚCIE: <?php echo htmlspecialchars($foo, ENT_NOQUOTES);
  26. A CO Z SQL?

  27. PDO (PHP DATA OBJECTS)

  28. PDO <?php //PDO try { $db = new PDO('mysql:host=hostname:dbname=some', 'username',

    'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF-8'); } catch (PDOException $e) { die($e->getMessage()); } $query = 'SELECT * FROM my_table WHERE cat_id = :id AND title = :title'; $stmt = $db->prepare($query); $stmt->bindValue(':id', $id, PDO::PARAM_INT); $stmt->bindValue(':title', $myTitle, PDO::PARAM_STR, 12); $stmt->execute(); while($row = $stmt->fetch(PDO::FETCH_OBJ)) { // .. }
  29. GLOBAL TO ZŁO!

  30. GLOBAL TO ZŁO! "JEŚLI DZIECKO TWE, UŻYWA GLOBALA, TO WIEDZ,

    ŻE COŚ SIĘ Z NIM DZIEJE"
  31. PARAMETRY FUNKCJI A REFERENCJA

  32. PARAMETRY FUNKCJI A REFERENCJA <?php function change($a, $o) { $a['foo']

    = 2; $o->bar = 2; } $arr = array('foo' => 1); $obj = new stdClass(); $obj->$bar = 1; change($arr, $obj); echo $arr['foo']; //displays 1 echo $obj->bar; //displays 2
  33. INCLUDE/REQUIRE(_ONCE)

  34. AUTOLOADING

  35. AUTOLOADING <?php function __autoload($name) { if (file_exists($name . '.php')) {

    require_once($name. '.php'); } } $a = new Foo(); //autoload file Foo.php from current directory
  36. FOR => FOREACH

  37. FOR => FOREACH <?php //DONT DO THAT! for ($i =

    0; $o < count($names); $i++) { $name['surname'] = mysql_query("SELECT surname FROM surnames WHERE name '{$names[i]}'"); } $names = array( 'John' => 'Doe', 'Chuck' => 'Norris' ); foreach ($names as $lastName) { echo $lastName, "\n"; } foreach ($names as $firstName => $lastName) { echo $firstName . ':' . $lastName; }
  38. == VS ===

  39. == VS === // "===" MEANS THAT THEY ARE IDENTICAL

    // "==" MEANS THAT THEY ARE EQUAL // "!=" MEANS THAT THEY AREN'T EQUAL. FALSE NULL ARRAY() 0 "0" 0X0 "0X0" "000" "0000" FALSE === == == == == == != != != NULL == === == == != == != != != ARRAY() == == === != != != != != != 0 == == != === == === == == == "0" == != != == === == == == == 0X0 == == != === == === == == == "0X0" != != != == == == === == == "000" != != != == == == == === == "0000" != != != == == == == == === HTTP://STACKOVERFLOW.COM/QUESTIONS/80646/HOW- DO-THE-EQUALITY-DOUBLE-EQUALS-AND-IDENTITY- TRIPLE-EQUALS-COMPARISO
  40. OUTPUT BUFFERING

  41. OUTPUT BUFFERING Cannot add/modify header information - headers already sent

    by...
  42. OUTPUT BUFFERING *.php <?php ob_start(); //some code header('Location: http://e.com') ob_end_flush();

    php.ini output_buffering = On UTF BOM UWAGA
  43. EVAL IS EVIL

  44. VARIABLE VARIABLES

  45. VARIABLE VARIABLES // variable variables class Some { public function

    foo() { return "Hello World"; } } $foo = 'Hello World'; $bar = 'foo'; echo $$bar; //displays 'Hello World' $obj = new Some(); echo $obj->$foo(); //displays Hello World //much better! call_user_func(array($obj, $foo)); call_user_func(array('Some', $foo));
  46. STRINGI

  47. STRINGI JAKIE MAMY RODZAJE STRINGÓW?

  48. STRINGI

  49. STRINGI (W PHP;-) SINGLE QUOTED DOUBLE QUOTED HEREDOC NOWDOC (PHP

    5.3)
  50. STRINGI (W PHP;-) <?php $ex1 = 'Value of var foo

    is $foo'; $ex2 = "Value of var foo is $foo"; $ex3 = <<<HD Value of foo is $foo HD; $ex4 = <<<'ND' Value of foo is $foo 'ND'; echo $ex1 . "\n"; // Value of var foo is $foo echo $ex2 . "\n"; // Value of var foo is bar echo $ex3 . "\n"; // Value of var foo is bar echo $ex4 . "\n"; // Value of var foo is $foo
  51. KODOWANIE ZNAKÓW

  52. KODOWANIE ZNAKÓW

  53. KODOWANIE ZNAKÓW "ONE CHARSET TO RULE THEM ALL"

  54. KODOWANIE ZNAKÓW UTF-8 ALE.... MB_*

  55. MAGIA W PHP

  56. MAGIA W PHP Przygody Harrego Pottera

  57. MAGIA W PHP __construct __destruct __call __callStatic __get __set __isset

    __unset __sleep __wakeup __toString __invoke __set_state __clone
  58. MAGIA W PHP <?php class Foo { private $_properties =

    array( 'foo' => 123, 'bar' => 456 ); public function __get($var) { if (!array_key_exists($var, $this->_properties)) { return null; } return $this->_properties[$var]; } public function __set($var, $value) { if (!array_key_exists($var, $this->_properties)) { throw new Exception('You cannot set that property'); } else { $this->_properties[$var] = $value; } } } $obj = new Foo(); $obj->foo; //gives 123 $obj->nonExists; //throws Exception
  59. MAGIA W PHP

  60. RETURN

  61. RETURN <?php function foo() { return 'Hello World'; } function

    bar() { echo 'Hello World'; } echo foo(); // Hello World <- GOOD bar(); // Hello World <- BAD
  62. XDEBUG

  63. XDEBUG

  64. APC, EACCLERATOR, XCACHE, ZEND OPTIMIZER

  65. JAKA WERSJA PHP?

  66. PHP4

  67. PHP4

  68. PHP 5.2.X PHP4

  69. PHP 5.2.X PHP4

  70. PHP 5.3.X PHP 5.2.X PHP4

  71. PHP 5.3.X PHP 5.2.X PHP4

  72. PHP 5.3

  73. PHP 5.3 PRZESTRZENIE NAZW LAMBDAS/CLOSURES LATE STATIC BINDING __CALLSTATIC GOTO

    WYDAJNOŚĆ - DO 30% SZYBSZE
  74. ?>

  75. VCS = VERSION CONTROL SYSTEM

  76. VCS HTTP://STACKOVERFLOW.COM/ QUESTIONS/132520/GOOD-EXCUSES-NOT- TO-USE-VERSION-CONTROL

  77. IDE? EDYTOR PROGRAMISTY? NOTATNIK?

  78. WINDOWS + WEBDEV ?

  79. None
  80. NIE WYNAJDUJ KOŁA NA NOWO

  81. None
  82. FRAMEWORKI

  83. FRAMEWORKI

  84. FRAMEWORKI ALE

  85. FRAMEWORKI ALE

  86. FRAMEWORKI MVC VS MVP

  87. FRAMEWORKI MVC VS MVP

  88. MÓJ KOD NIE DZIAŁA!!!

  89. MÓJ KOD NIE DZIAŁA!!! while(!foundAnswer()) { checkManual(); }

  90. MÓJ KOD NIE DZIAŁA!!!

  91. MÓJ KOD NIE DZIAŁA!!!

  92. JAK SIĘ UCZYĆ?

  93. JAK SIĘ UCZYĆ?

  94. JAK SIĘ UCZYĆ? HTTP://PLANETA.PHP.PL/

  95. JAK PISAĆ KOD?

  96. JAK PISAĆ KOD? "PISZ KOD TAK, JAKBY OSOBA, KTÓRA GO

    PO TOBIE PRZEJMIE, BYŁA UZBROJONYM PSYCHOPATĄ ZNAJĄCYM TWÓJ ADRES"
  97. JAK PISAĆ KOD?

  98. JAK PISAĆ KOD? STYL KODOWANIA

  99. ODPOWIEDNIE NARZĘDZIE DO ZADANIA

  100. None
  101. DZIĘKI!

  102. PYTANIA? UWAGI?

  103. RADOSŁAW BENKEL SINGLES HTTP://BLOG.RBENKEL.ME @SINGLESPL