SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
php: back to basics
a 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 Lerdorf
phpDay 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 Suraski
phpDay 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 rn.
• 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 rn.
• 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 scalari
Tipi 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 Guide
Zend Technologies Ltd.
Pagg. 82 - 112
Sebastian Bergmann
Understanding the PHP Object Model
http://goo.gl/pA8MB
Task 1: da procedure a Symfony 2
26
Symfony 2.0 Book
SensioLabs
Pagg. 14 - 25
Books
27
PHP Objects, Patterns, and Practice
Matt Zandstra
Apress

Más contenido relacionado

Destacado

If "Embrace Change" is Hard (@milano-xpug)
If "Embrace Change" is Hard (@milano-xpug)If "Embrace Change" is Hard (@milano-xpug)
If "Embrace Change" is Hard (@milano-xpug)Fabio Mora
 
Perchè Agile? Cambiamenti culturali work in progress.
Perchè Agile? Cambiamenti culturali work in progress.Perchè Agile? Cambiamenti culturali work in progress.
Perchè Agile? Cambiamenti culturali work in progress.Fabio Mora
 
Shazam to Spotify - spike/demo web project
Shazam to Spotify - spike/demo web projectShazam to Spotify - spike/demo web project
Shazam to Spotify - spike/demo web projectFabio Mora
 
Linux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelanceLinux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelanceFabio Mora
 
Continuous Delivery di una WebApp - by example
Continuous Delivery di una WebApp - by exampleContinuous Delivery di una WebApp - by example
Continuous Delivery di una WebApp - by exampleFabio Mora
 
CoderDojo - Galliate, 20 aprile 2013
CoderDojo - Galliate, 20 aprile 2013CoderDojo - Galliate, 20 aprile 2013
CoderDojo - Galliate, 20 aprile 2013Fabio Mora
 
php: standards & fizz buzz
php: standards & fizz buzzphp: standards & fizz buzz
php: standards & fizz buzzFabio Mora
 
The Crossword Game
The Crossword GameThe Crossword Game
The Crossword GameFabio Mora
 
Linux, sicurezza & social hacking
Linux, sicurezza & social hackingLinux, sicurezza & social hacking
Linux, sicurezza & social hackingFabio Mora
 
cambiare punto di vista
cambiare punto di vistacambiare punto di vista
cambiare punto di vistaFabio Mora
 
Se “Embrace Change” è difficile.
Se “Embrace Change” è difficile.Se “Embrace Change” è difficile.
Se “Embrace Change” è difficile.Fabio Mora
 
Esame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e SoftwareEsame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e SoftwareFabio Mora
 
It was just Open Source - TEDx Novara
It was just Open Source - TEDx NovaraIt was just Open Source - TEDx Novara
It was just Open Source - TEDx NovaraFabio Mora
 

Destacado (13)

If "Embrace Change" is Hard (@milano-xpug)
If "Embrace Change" is Hard (@milano-xpug)If "Embrace Change" is Hard (@milano-xpug)
If "Embrace Change" is Hard (@milano-xpug)
 
Perchè Agile? Cambiamenti culturali work in progress.
Perchè Agile? Cambiamenti culturali work in progress.Perchè Agile? Cambiamenti culturali work in progress.
Perchè Agile? Cambiamenti culturali work in progress.
 
Shazam to Spotify - spike/demo web project
Shazam to Spotify - spike/demo web projectShazam to Spotify - spike/demo web project
Shazam to Spotify - spike/demo web project
 
Linux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelanceLinux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelance
 
Continuous Delivery di una WebApp - by example
Continuous Delivery di una WebApp - by exampleContinuous Delivery di una WebApp - by example
Continuous Delivery di una WebApp - by example
 
CoderDojo - Galliate, 20 aprile 2013
CoderDojo - Galliate, 20 aprile 2013CoderDojo - Galliate, 20 aprile 2013
CoderDojo - Galliate, 20 aprile 2013
 
php: standards & fizz buzz
php: standards & fizz buzzphp: standards & fizz buzz
php: standards & fizz buzz
 
The Crossword Game
The Crossword GameThe Crossword Game
The Crossword Game
 
Linux, sicurezza & social hacking
Linux, sicurezza & social hackingLinux, sicurezza & social hacking
Linux, sicurezza & social hacking
 
cambiare punto di vista
cambiare punto di vistacambiare punto di vista
cambiare punto di vista
 
Se “Embrace Change” è difficile.
Se “Embrace Change” è difficile.Se “Embrace Change” è difficile.
Se “Embrace Change” è difficile.
 
Esame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e SoftwareEsame di Stato: idee Hardware e Software
Esame di Stato: idee Hardware e Software
 
It was just Open Source - TEDx Novara
It was just Open Source - TEDx NovaraIt was just Open Source - TEDx Novara
It was just Open Source - TEDx Novara
 

Similar a php: back to basics

Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHPextrategy
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferSimone Onofri
 
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H PLaboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H Pguestbe916c
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4Alessandro Bogliolo
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritornolordarthas
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourserik0
 
Gaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ componentsGaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ componentsFrancesco Fullone
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Sardegna Ricerche
 
Da e verso odoo xml rpc, erppeek e python
Da e verso odoo  xml rpc, erppeek e pythonDa e verso odoo  xml rpc, erppeek e python
Da e verso odoo xml rpc, erppeek e pythonOpenCode
 
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!Codemotion
 
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...Simone Onofri
 

Similar a php: back to basics (20)

Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network Sniffer
 
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H PLaboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
The road to php7
The road to php7The road to php7
The road to php7
 
Php e mysql (primi passi)
Php e mysql (primi passi)Php e mysql (primi passi)
Php e mysql (primi passi)
 
MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4MOOC Piattaforme digitali per la gestione del territorio - 4.4
MOOC Piattaforme digitali per la gestione del territorio - 4.4
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
Mini Corso Java - Parte 1
Mini Corso Java - Parte 1Mini Corso Java - Parte 1
Mini Corso Java - Parte 1
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Linux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowToLinux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowTo
 
Gaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ componentsGaetano Giunta: introduzione agli eZ components
Gaetano Giunta: introduzione agli eZ components
 
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
Il cuore di Arduino: Un sistema di sviluppo basato su microcontrollore Atmel ...
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
 
PHP 7 - benvenuto al futuro
PHP 7 - benvenuto al futuroPHP 7 - benvenuto al futuro
PHP 7 - benvenuto al futuro
 
Da e verso odoo xml rpc, erppeek e python
Da e verso odoo  xml rpc, erppeek e pythonDa e verso odoo  xml rpc, erppeek e python
Da e verso odoo xml rpc, erppeek e python
 
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
 
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
Gli HTTP Security Header e altri elementi da sapere su HTTP in un Web Applica...
 

Más de Fabio Mora

Esperimenti Kanban: tra economia e teoria delle code.
Esperimenti Kanban: tra economia e teoria delle code.Esperimenti Kanban: tra economia e teoria delle code.
Esperimenti Kanban: tra economia e teoria delle code.Fabio Mora
 
La Unix Way vista da un DevOps
La Unix Way vista da un DevOpsLa Unix Way vista da un DevOps
La Unix Way vista da un DevOpsFabio Mora
 
We don't talk about Agile anymore
We don't talk about Agile anymoreWe don't talk about Agile anymore
We don't talk about Agile anymoreFabio Mora
 
A quick introduction: Extreme Programming
A quick introduction: Extreme ProgrammingA quick introduction: Extreme Programming
A quick introduction: Extreme ProgrammingFabio Mora
 
Quick Introduction: Extreme Programming
Quick Introduction: Extreme ProgrammingQuick Introduction: Extreme Programming
Quick Introduction: Extreme ProgrammingFabio Mora
 
Progressive Feature Rollout
Progressive Feature RolloutProgressive Feature Rollout
Progressive Feature RolloutFabio Mora
 
2009 - Quotidiana Legalità
2009 - Quotidiana Legalità2009 - Quotidiana Legalità
2009 - Quotidiana LegalitàFabio Mora
 
LinuxDay 2009 - Quali programmi?
LinuxDay 2009 - Quali programmi?LinuxDay 2009 - Quali programmi?
LinuxDay 2009 - Quali programmi?Fabio Mora
 
LinuxDay 2009 - Cos'è Linux?
LinuxDay 2009 - Cos'è Linux?LinuxDay 2009 - Cos'è Linux?
LinuxDay 2009 - Cos'è Linux?Fabio Mora
 

Más de Fabio Mora (9)

Esperimenti Kanban: tra economia e teoria delle code.
Esperimenti Kanban: tra economia e teoria delle code.Esperimenti Kanban: tra economia e teoria delle code.
Esperimenti Kanban: tra economia e teoria delle code.
 
La Unix Way vista da un DevOps
La Unix Way vista da un DevOpsLa Unix Way vista da un DevOps
La Unix Way vista da un DevOps
 
We don't talk about Agile anymore
We don't talk about Agile anymoreWe don't talk about Agile anymore
We don't talk about Agile anymore
 
A quick introduction: Extreme Programming
A quick introduction: Extreme ProgrammingA quick introduction: Extreme Programming
A quick introduction: Extreme Programming
 
Quick Introduction: Extreme Programming
Quick Introduction: Extreme ProgrammingQuick Introduction: Extreme Programming
Quick Introduction: Extreme Programming
 
Progressive Feature Rollout
Progressive Feature RolloutProgressive Feature Rollout
Progressive Feature Rollout
 
2009 - Quotidiana Legalità
2009 - Quotidiana Legalità2009 - Quotidiana Legalità
2009 - Quotidiana Legalità
 
LinuxDay 2009 - Quali programmi?
LinuxDay 2009 - Quali programmi?LinuxDay 2009 - Quali programmi?
LinuxDay 2009 - Quali programmi?
 
LinuxDay 2009 - Cos'è Linux?
LinuxDay 2009 - Cos'è Linux?LinuxDay 2009 - Cos'è Linux?
LinuxDay 2009 - Cos'è Linux?
 

Último

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Último (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

php: back to basics

  • 1. php: back to basics a fast overview Fabio Mora @morafabio http://fabio.mora.name 1
  • 2. 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
  • 3. 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-->
  • 5. 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
  • 6. 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; ?>
  • 8. 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
  • 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) 9 2004 • 2008 PHP 5.3: closures, namespaces, lambda... • 2012 PHP 5.4: traits, short array syntax, UTF-8... ...ad oggi
  • 10. 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
  • 11. Tag PHP • Standard <?php ?> • Short <? ?>, <?=$var ?> • Script <script language=”php”></script> • ASP <% %> 11
  • 12. 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!
  • 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 rn. • 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
  • 14. 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 rn. • 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
  • 15. Dati scalari Tipi 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
  • 16. 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
  • 17. 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?
  • 18. 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?
  • 19. 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
  • 20. 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.
  • 25. Functions & OOP 25 PHP 5.3 ZCE Study Guide Zend Technologies Ltd. Pagg. 82 - 112 Sebastian Bergmann Understanding the PHP Object Model http://goo.gl/pA8MB
  • 26. Task 1: da procedure a Symfony 2 26 Symfony 2.0 Book SensioLabs Pagg. 14 - 25
  • 27. Books 27 PHP Objects, Patterns, and Practice Matt Zandstra Apress