php: back to basics

Post on 27-Jun-2015

354 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

slides from a workshop - 2012 history, syntax, overflow, operators, oop and functions, php5.4, symfony, automated tests

TRANSCRIPT

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