php: back to basicsa fast overview
Fabio Mora @morafabio http://fabio.mora.name
1
La storia
• Rasmus Lerdorf (1968, danimarca) ha bisogno di tracciare 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 Perl
2
1994
La storia
3
PHP/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-->
Rasmus LerdorfphpDay 2012, Verona (IT)
La storia
• Rasmus riscrive PHP/FI con una sintassi il più vicina possibile al C
• Integra supporto ai database(Postres95, DBM, mSQL)
• Accesso ai cookie
• Due studenti australiani, Andi Gutmans e Zeev Suraki, contattano Rasmus per offrirgli aiuto
• Nasce il primo devteam di PHP
5
1995
La storia
6
PHP/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;
?>
Zeev SuraskiphpDay 2012, Verona (IT)
La storia
• Il progetto ora è PHP Hypertext Preprocessor
• La nuova versione è PHP 3: include API, supporto multi database, è slegato dal POSIX e funziona anche su Microsoft Windows.
• In breve raggiunge il 10% dei domini attivi (erano 60.000 all'epoca)
8
1998
• 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 OOP
2000
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)
9
2004
• 2008 PHP 5.3: closures, namespaces, lambda...
• 2012 PHP 5.4: traits, short array syntax, UTF-8...
...ad oggi
La sintassi
• Semplice e facile da capire
• Gli statements terminano sempre con semi-colon ;
• Deriva da C, Perl e Java.
• File di testo con all'interno dei tag speciali
• Per commentare una singola riga si usa il double slash // , la multipla /**/.
10
Tag PHP
• Standard <?php ?>
• Short <? ?>, <?=$var ?>
• Script <script language=”php”></script>
• ASP <% %>
11
Tag PHP
• Standard <?php ?>
• Short <? ?>, <?=$var ?>
• Script <script language=”php”></script>
• ASP <% %>
12
Short, script ed ASP sono deprecati, ed il loro uso è fortemente scoraggiato!
Caratteri newline
• Tutti i caratteri fuori dai tag PHP sono copiati così come sono verso l'output
• Le sequenze di newline valide sono \r, \n o \r\n.
• Ma in HTTP il carattere \n è usato per separare gli headers
• La prima newline dopo il tag di chiusura ?> viene sempre eliminata dall’interprete
• Alcuni editor aggiungono automaticamente una \n alla fine dei file
13
Caratteri newline
• Tutti i caratteri fuori dai tag PHP sono copiati così come sono verso l'output
• Le sequenze di newline valide sono \r, \n o \r\n.
• Ma in HTTP il carattere \n è usato per separare gli headers
• La prima newline dopo il tag di chiusura ?> viene sempre eliminata dall’interprete
• Alcuni editor aggiungono automaticamente una \n alla fine dei file
14
Se non è strettamente necessario, è meglio non aggiungere mai il tag PHP di chiusura ad un file
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-point
Sistemi 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, -0X12
Notazioni:
• Decimale: tradizionale 0.12, 123.10, -554
• Esponenziale: identificata dalla mantissa, es. 1E2, 2E5, 1.2e3, 15
Dati compound e altri tipi
Compound
• Array: sono contenitori di dati ordinati e possino essere usati per fare store di qualsiasi altro tipo di dato.
• Oggetti: sono contenitori di dati e codice
Altri tipi speciali
• Null: indica che non c'è valore, è una special flag.
• Resource: è un tipo di dato che indica una risorsa non nativa di PHP, come ad esempio i context
16
Overflow?!
17
PHP non tiene traccia degli overflow ed operazioni banali possono causare risultati catastrofici.
print ‘And the answer is... ’ . (int) ( (0.1 + 0.7) * 10 );
Cosa stampa la riga sopra?
Overflow?!
18
PHP non tiene traccia degli overflow ed operazioni banali possono 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?
Overflow?!
19
PHP non tiene traccia degli overflow ed operazioni banali possono 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
Overflow?!
20
PHP non tiene traccia degli overflow ed operazioni banali possono 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
I float 0.1 + 0.7 è invece uguale a 7.999999 e durante il cast, la parte decimale viene troncata. Il risultato è un errore del 12,5%!
Per le operazioni matematiche va usata l’estensione BCMath.
Mappa degli operatori
21
Mappa degli operatori
22
Mappa degli operatori
23
Mappa degli operatori
24
Functions & OOP
25
PHP 5.3 ZCE Study GuideZend Technologies Ltd.
Pagg. 82 - 112
Sebastian BergmannUnderstanding the PHP Object Model
http://goo.gl/pA8MB
Task 1: da procedure a Symfony 2
26
Symfony 2.0 BookSensioLabs
Pagg. 14 - 25
Books
27
PHP Objects, Patterns, and PracticeMatt Zandstra
Apress
Top Related