Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

php: back to basics

690 views

Published on

slides from a workshop - 2012

history, syntax, overflow, operators, oop and functions, php5.4, symfony, automated tests

Published in: Technology
  • Be the first to comment

  • Be the first to like this

php: back to basics

  1. 1. php: back to basicsa fast overviewFabio Mora @morafabio http://fabio.mora.name1
  2. 2. La storia• Rasmus Lerdorf (1968, danimarca) ha bisogno ditracciare le visite sul suo sito internet• Per farlo decide di scrivere un modulo CGI(Common Gateway Interface)• Lo chiama Personal HomePage/Form Interpreter• La sintassi era simile al Perl21994
  3. 3. La storia3PHP/FI<!--getenv HTTP_USER_AGENT--><!--ifsubstr $exec_result Mozilla-->Hey, you are using Netscape!<p><!--endif--><!--sql database select * from table where user=$username--><!--ifless $numentries 1-->Sorry, that record does not exist<p><!--endif exit-->Welcome <!--$user-->!<p>You have <!--$index:0--> credits left in your account.<p><!--include /text/footer.html-->
  4. 4. Rasmus LerdorfphpDay 2012,Verona (IT)
  5. 5. La storia• Rasmus riscrive PHP/FI con una sintassi il più vicinapossibile al C• Integra supporto ai database(Postres95, DBM, mSQL)• Accesso ai cookie• Due studenti australiani, Andi Gutmans e ZeevSuraki, contattano Rasmus per offrirgli aiuto• Nasce il primo devteam di PHP51995
  6. 6. La storia6PHP/FI 2<?$name = "bob";$db = "db";$result = msql($db,"select * from table where firstname=$name");$num = msql_numrows($result);echo "$num records found!<p>";$i=0;while($i<$num);echo msql_result($result,$i,"fullname");echo "<br>";echo msql_result($result,$i,"address");echo "<br>";$i++;endwhile;?>
  7. 7. Zeev SuraskiphpDay 2012,Verona (IT)
  8. 8. La storia• Il progetto ora è PHP Hypertext Preprocessor• La nuova versione è PHP 3: include API, supportomulti database, è slegato dal POSIX e funzionaanche su Microsoft Windows.• In breve raggiunge il 10% dei domini attivi (erano60.000 allepoca)81998• Viene rilasciato PHP4 con il primo Zend Core(dai nomi Zeev + Andi)• Include full support ad HTTP, output buffering,moduli esterni ed una prima versione di OOP2000
  9. 9. La storia• Arriva PHP 5 assieme allo Zend Engine 2.0• Il paradigma OOP ora è completo• PEAR (PHP Extension and Application Repository)• PECL (PHP Extensions Community Library)92004• 2008 PHP 5.3: closures, namespaces, lambda...• 2012 PHP 5.4: traits, short array syntax, UTF-8......ad oggi
  10. 10. La sintassi• Semplice e facile da capire• Gli statements terminano sempre consemi-colon ;• Deriva da C, Perl e Java.• File di testo con allinterno dei tag speciali• Per commentare una singola riga si usa ildouble slash // , la multipla /**/.10
  11. 11. Tag PHP• Standard<?php ?>• Short<? ?>, <?=$var ?>• Script<script language=”php”></script>• ASP<% %>11
  12. 12. Tag PHP• Standard<?php ?>• Short<? ?>, <?=$var ?>• Script<script language=”php”></script>• ASP<% %>12Short, script ed ASP sono deprecati, ed il lorouso è fortemente scoraggiato!
  13. 13. Caratteri newline• Tutti i caratteri fuori dai tag PHP sono copiati cosìcome sono verso loutput• Le sequenze di newline valide sono r, n o rn.• Ma in HTTP il carattere n è usato per separare gliheaders• La prima newline dopo il tag di chiusura ?> vienesempre eliminata dall’interprete• Alcuni editor aggiungono automaticamente una nalla fine dei file13
  14. 14. Caratteri newline• Tutti i caratteri fuori dai tag PHP sono copiati cosìcome sono verso loutput• Le sequenze di newline valide sono r, n o rn.• Ma in HTTP il carattere n è usato per separare gliheaders• La prima newline dopo il tag di chiusura ?> vienesempre eliminata dall’interprete• Alcuni editor aggiungono automaticamente una nalla fine dei file14Se non è strettamente necessario, è meglio nonaggiungere mai il tag PHP di chiusura ad un file
  15. 15. Dati scalariTipi di dato:• boolean: un valore che può essere o true o false• int: con segno, intero• string: un valore con tipo di dato binario• float: con segno, floating-pointSistemi di numerazione:• Decimal: notazione standard, es. 20; -30; 1239...• Octal: identificata dal leading zero, es. 0777, 0200...Attenzione a non confondere ottale e decimale: 0777 è diverso da 777!• Hexadecimal: identificata dal prefisso 0x (case insensitive),es. 0x101, 0XFF, -0X12Notazioni:• Decimale: tradizionale 0.12, 123.10, -554• Esponenziale: identificata dalla mantissa, es. 1E2, 2E5, 1.2e3,15
  16. 16. Dati compound e altri tipiCompound• Array: sono contenitori di dati ordinati e possino essereusati per fare store di qualsiasi altro tipo di dato.• Oggetti: sono contenitori di dati e codiceAltri tipi speciali• Null: indica che non cè valore, è una special flag.• Resource: è un tipo di dato che indica una risorsa nonnativa di PHP, come ad esempio i context16
  17. 17. Overflow?!17PHP non tiene traccia degli overflow ed operazioni banalipossono causare risultati catastrofici.print ‘And the answer is... ’ . (int) ( (0.1 + 0.7) * 10 );Cosa stampa la riga sopra?
  18. 18. Overflow?!18PHP non tiene traccia degli overflow ed operazioni banalipossono causare risultati catastrofici.print ‘And the answer is... ’ . (int) ( (0.1 + 0.7) * 10 );Cosa stampa la riga sopra?0,1 più 0,7 fa 0,8, che per 10 fa 8. Ok?
  19. 19. Overflow?!19PHP non tiene traccia degli overflow ed operazioni banalipossono causare risultati catastrofici.print ‘And the answer is... ’ . (int) ( (0.1 + 0.7) * 10 );Cosa stampa la riga sopra?0,1 più 0,7 fa 0,8, che per 10 fa 8. Ok?And the answer is... 7
  20. 20. Overflow?!20PHP non tiene traccia degli overflow ed operazioni banalipossono causare risultati catastrofici.print ‘And the answer is... ’ . (int) ( (0.1 + 0.7) * 10 );Cosa stampa la riga sopra?0,1 più 0,7 fa 0,8, che per 10 fa 8. Ok?And the answer is... 7I float 0.1 + 0.7 è invece uguale a 7.999999 e durante ilcast, la parte decimale viene troncata. Il risultato è unerrore del 12,5%!Per le operazioni matematiche va usatal’estensione BCMath.
  21. 21. Mappa degli operatori21
  22. 22. Mappa degli operatori22
  23. 23. Mappa degli operatori23
  24. 24. Mappa degli operatori24
  25. 25. Functions & OOP25PHP 5.3 ZCE Study GuideZend Technologies Ltd.Pagg. 82 - 112Sebastian BergmannUnderstanding the PHP Object Modelhttp://goo.gl/pA8MB
  26. 26. Task 1: da procedure a Symfony 226Symfony 2.0 BookSensioLabsPagg. 14 - 25
  27. 27. Books27PHP Objects, Patterns, and PracticeMatt ZandstraApress

×