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

6,018 views
5,932 views

Published on

Po sieci krąży wiele opinii, jak to programiści PHP nie są prawdziwymi programistami i że PHP to w ogóle nie jest język programowania, etc.
A winni takiego stanu rzeczy są sami programiści bądź właśnie „programiści”. Dlaczego? W każdym języku da się napisać kod zły jak i dobry. A w świecie PHP niestety dużo jest tego złego – choć trend ten zmienia się na lepsze.

Celem wykładu jest zapoznanie uczestników z rzeczami, na które należy zwrócić uwagę podczas tworzenia aplikacji w języku PHP. Druga (krótsza) część prezentacji będzie poświęcona ogólnym dobrym praktykom programistycznym, nie związanym z żadnym konkretnym językiem.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,018
On SlideShare
0
From Embeds
0
Number of Embeds
2,888
Actions
Shares
0
Downloads
20
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. JAK NIE ZOSTAĆ„PROGRAMISTĄ” PHP? DOBRE I ZŁE PRAKTYKI
  2. 2. O MNIERadosław Benkel - singlesPHP - 2007SQL - 2007JavaScript -2008Projekty: DELIRIUM, GENOSIS, inne
  3. 3. PHPCZYM JEST PHP?
  4. 4. PHP CZYM JEST PHP?DYNAMICZNIE TYPOWANYM, OBIEKTOWYM, SKRYPTOWYM JĘZYKIEM PROGRAMOWANIA
  5. 5. JAKA JEST NAJWIĘKSZAWADA A JEDNOCZEŚNIE ZALETA PHP?
  6. 6. <?PHP
  7. 7. HTTP://WWW.FLICKR.COM/PHOTOS/HATM/3448824312/ BY HATM
  8. 8. WYŚWIETLANIE BŁĘDÓW
  9. 9. WYŚWIETLANIE BŁĘDÓW
  10. 10. WYŚWIETLANIE BŁĘDÓW error_reporting = E_ALL | E_STRICTphp.ini display_errors = On
  11. 11. WYŚWIETLANIE BŁĘDÓW error_reporting = E_ALL | E_STRICTphp.ini display_errors = On <?php *.php error_reporting(E_ALL | E_STRICT) ini_set(display_errors, On)
  12. 12. WYŚWIETLANIE BŁĘDÓW error_reporting = E_ALL | E_STRICT php.ini display_errors = On <?php *.php error_reporting(E_ALL | E_STRICT) ini_set(display_errors, On) php_flag display_errors on.htaccess php_value error_reporting 32767
  13. 13. WYŚWIETLANIE BŁĘDÓW @
  14. 14. INNE DYREKTYWY PHP.INI
  15. 15. INNE DYREKTYWY PHP.INIregister_globals = Off
  16. 16. INNE DYREKTYWY PHP.INIhttp://www.example.com/find.php?title=Foo<?php//register_globals = On$title // Foo$_GET[title] // Foo//register_globals = Off$title // undefined$_GET[title] // Foo
  17. 17. INNE DYREKTYWY PHP.INIregister_globals = Offmagic_quotes_gpc = Off
  18. 18. INNE DYREKTYWY PHP.INIregister_globals = Offmagic_quotes_gpc = Offmagic_quotes_runtime = Off
  19. 19. GET, POST [, PUT, DELETE]
  20. 20. GET, POST [,PUT, DELETE]HTTP://WWW.ONET.TV/JUSTIN-BIEBER-TRAFI-NA-ODWYK,9025126,1,KLIP.HTML# $_GETHTTP://EXAMPLE.COM/INDEX.PHP?ID=123&TITLE=FOO
  21. 21. FILTROWANIE WEJŚCIA I WYJŚĆIA
  22. 22. FILTROWANIE WEJŚCIA I WYJŚCIA WEJŚCIE:<?php$search_html = filter_input( INPUT_GET, foo, FILTER_SANITIZE_SPECIAL_CHARS); WYJŚCIE:<?php echo htmlspecialchars($foo, ENT_NOQUOTES);
  23. 23. A CO Z SQL?
  24. 24. PDO(PHP DATA OBJECTS)
  25. 25. PDO<?php//PDOtry { $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)) { // ..}
  26. 26. GLOBAL TO ZŁO!
  27. 27. GLOBAL TO ZŁO! "JEŚLI DZIECKO TWE, UŻYWA GLOBALA, TO WIEDZ, ŻE COŚ SIĘ Z NIM DZIEJE"
  28. 28. PARAMETRY FUNKCJI A REFERENCJA
  29. 29. PARAMETRY FUNKCJI A REFERENCJA<?phpfunction 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 1echo $obj->bar; //displays 2
  30. 30. INCLUDE/REQUIRE(_ONCE)
  31. 31. AUTOLOADING
  32. 32. AUTOLOADING<?phpfunction __autoload($name){ if (file_exists($name . .php)) { require_once($name. .php); }}$a = new Foo(); //autoload file Foo.php from current directory
  33. 33. FOR => FOREACH
  34. 34. 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;}
  35. 35. == VS ===
  36. 36. == VS ===// "===" MEANS THAT THEY ARE IDENTICAL// "==" MEANS THAT THEY ARE EQUAL// "!=" MEANS THAT THEY ARENT 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
  37. 37. OUTPUT BUFFERING
  38. 38. OUTPUT BUFFERINGCannot add/modify headerinformation - headersalready sent by...
  39. 39. OUTPUT BUFFERING <?php ob_start();*.php //some code header(Location: http://e.com) ob_end_flush();php.ini output_buffering = OnUTF BOM UWAGA
  40. 40. EVAL IS EVIL
  41. 41. VARIABLE VARIABLES
  42. 42. VARIABLE VARIABLES// variable variablesclass 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));
  43. 43. STRINGI
  44. 44. STRINGIJAKIE MAMY RODZAJE STRINGÓW?
  45. 45. STRINGI
  46. 46. STRINGI (W PHP;-) SINGLE QUOTED DOUBLE QUOTED HEREDOC NOWDOC (PHP 5.3)
  47. 47. STRINGI (W PHP;-)<?php$ex1 = Value of var foo is $foo;$ex2 = "Value of var foo is $foo";$ex3 = <<<HDValueof foois$fooHD;$ex4 = <<<NDValue offoois $fooND;echo $ex1 . "n"; // Value of var foo is $fooecho $ex2 . "n"; // Value of var foo is barecho $ex3 . "n"; // Value of var foo is barecho $ex4 . "n"; // Value of var foo is $foo
  48. 48. KODOWANIE ZNAKÓW
  49. 49. KODOWANIE ZNAKÓW
  50. 50. KODOWANIE ZNAKÓW"ONE CHARSET TO RULE THEM ALL"
  51. 51. KODOWANIE ZNAKÓW UTF-8 ALE.... MB_*
  52. 52. MAGIA W PHP
  53. 53. MAGIA W PHPPrzygodyHarregoPottera
  54. 54. MAGIA W PHP__construct __unset__destruct __sleep__call __wakeup__callStatic __toString__get __invoke__set __set_state__isset __clone
  55. 55. MAGIA W PHP<?phpclass 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
  56. 56. MAGIA W PHP
  57. 57. RETURN
  58. 58. RETURN<?phpfunction foo() { return Hello World;}function bar() { echo Hello World;}echo foo(); // Hello World <- GOODbar(); // Hello World <- BAD
  59. 59. XDEBUG
  60. 60. XDEBUG
  61. 61. APC, EACCLERATOR,XCACHE, ZEND OPTIMIZER
  62. 62. JAKA WERSJA PHP?
  63. 63. PHP4
  64. 64. PHP4
  65. 65. PHP4PHP 5.2.X
  66. 66. PHP4PHP 5.2.X
  67. 67. PHP4PHP 5.2.XPHP 5.3.X
  68. 68. PHP4PHP 5.2.XPHP 5.3.X
  69. 69. PHP 5.3
  70. 70. PHP 5.3PRZESTRZENIE NAZWLAMBDAS/CLOSURESLATE STATIC BINDING__CALLSTATICGOTOWYDAJNOŚĆ - DO 30% SZYBSZE
  71. 71. ?>
  72. 72. VCS =VERSION CONTROL SYSTEM
  73. 73. VCS HTTP://STACKOVERFLOW.COM/QUESTIONS/132520/GOOD-EXCUSES-NOT- TO-USE-VERSION-CONTROL
  74. 74. IDE?EDYTOR PROGRAMISTY? NOTATNIK?
  75. 75. WINDOWS + WEBDEV ?
  76. 76. NIE WYNAJDUJ KOŁA NA NOWO
  77. 77. FRAMEWORKI
  78. 78. FRAMEWORKI
  79. 79. FRAMEWORKI ALE
  80. 80. FRAMEWORKI ALE
  81. 81. FRAMEWORKIMVC VS MVP
  82. 82. FRAMEWORKIMVC VS MVP
  83. 83. MÓJ KOD NIE DZIAŁA!!!
  84. 84. MÓJ KOD NIE DZIAŁA!!!while(!foundAnswer()) { checkManual();}
  85. 85. MÓJ KOD NIE DZIAŁA!!!
  86. 86. MÓJ KOD NIE DZIAŁA!!!
  87. 87. JAK SIĘ UCZYĆ?
  88. 88. JAK SIĘ UCZYĆ?
  89. 89. JAK SIĘ UCZYĆ?HTTP://PLANETA.PHP.PL/
  90. 90. JAK PISAĆ KOD?
  91. 91. JAK PISAĆ KOD? "PISZ KOD TAK, JAKBY OSOBA,KTÓRA GO PO TOBIE PRZEJMIE, BYŁA UZBROJONYM PSYCHOPATĄ ZNAJĄCYM TWÓJ ADRES"
  92. 92. JAK PISAĆ KOD?
  93. 93. JAK PISAĆ KOD?STYL KODOWANIA
  94. 94. ODPOWIEDNIE NARZĘDZIE DO ZADANIA
  95. 95. DZIĘKI!
  96. 96. PYTANIA? UWAGI?
  97. 97. RADOSŁAW BENKEL SINGLESHTTP://BLOG.RBENKEL.ME @SINGLESPL

×