Il logo del sito

PHP Manual

Nota

Tutto quello che c'è da sapere su php è contenuto nel suo manuale. Il manuale php è stato tradotto nelle principali lingue europee ad eccezione dell'italiano. Prima di acquistare libri in inglese su php credo valga la pena imparare a muoversi nella documentazione ufficiale del linguaggio.

Per far questo leggerò attentamente le parti introduttive delle diverse sezioni del manuale e proverò a tradurne qualche parte. In questo modo dovrei riuscire a capire come sfruttare questa grande risorsa.

Dal momento che passerò da una sezione all'altra del manuale e salterò completamente molti argomenti, per poi tornare in seguito su alcuni di essi, prendere appunti su fogli di carta o blocchi notes renderebbe difficile ritrovare le cose e nel tempo vanificherebbe questo sforzo. Per questo ho deciso di prendere appunti utilizzando un blocco di OneNote. Ho comunque bisogno di un file php da caricare sul server per provare gli esempi riportati nel manuale. Questa pagina serve a questo.

§ Preface

Il manuale di php consiste principalmente di tre sezioni: function reference, language reference, major features, ed other supplemental information.

Sino ad ora ho utilizzato qualche volta la sezione function reference scopiazzando dai contributi degli utenti senza capirne bene la struttura. Credo sia necessario ripartire dalla sezione relativa al linguaggio. Ed è quello che farò soffermandomi sugli argomenti non trattati, o trattati marginalmente dal tutorial di w3schools.

§ Language References

Types

Objects
Object initializazion

Per creare un nuovo oggetto, usar lo statement new per instanziare una class:


<?php
class foo{
   function do_foo(){
      echo "Doing foo!";
   }
}
?>
Doing foo!

Per una trattazione completa, vedi il capitolo Classes and Objects

Conversione ad oggetto

<?php
$obj = (object) array('1' => 'foo');
var_dump(isset($obj->{'1'})); // outputs 'bool(false)'
var_dump(key($obj)); // outputs 'int(1)'
?>
bool(true) string(1) "1"

Ecco come si accede alle proprietà di un oggetto derivante dalla conversione di un array con keys numeriche:


<?php
$obj0 = (object) array('html','css', 'js', 'php');
foreach($obj0 as $key=>$value){
   echo nl2br("$key" . "=>". $value. "\n");
}
?>
0=>html
1=>css
2=>js
3=>php
Istanza di oggetti generici vuoti

In PHP 7 ci sono diversi modi per creare oggetti vuoti.


<?php
/*Questo è il modo più semplice*/
$genericObject = new stdClass();
echo "\$genericObject - ";
var_dump($genericObject);
echo nl2br("\n"); 
/*Questi sono gli altri metodi*/
$obj1 = new \stdClass; // Instantiate stdClass object
$obj3 = (object)[]; // Cast empty array to object

echo "\$obj1 - ";
var_dump($obj1);
echo nl2br("\n");

echo "\$obj3 - ";
var_dump($obj3);
echo nl2br("\n");

/* Questo non funziona con la versione 5.6.30 con la versione 7.0.19 funziona.*/

$obj2 = new class{}; // Instantiate anonymous class

echo "\$obj2 - ";
var_dump($obj2);
echo nl2br("\n");
?>
$genericObject - object(stdClass)#4 (0) { }
$obj1 - object(stdClass)#5 (0) { }
$obj3 - object(stdClass)#6 (0) { }
$obj2 - object(class@anonymous)#7 (0) { }
Callbaks / Callable

Alcune funzioni, come call_user_function() e usort(), accettano come parametri chiamate a funzioni o a metodi compresi i metodi statici o di classe.

Parametri come questi sono detti di tipo callable o callback.

I parametri di chiamata di funzioni sono stringhe contenti il nome della funzione che si desidera chiamare. Non sono ammessi i nomi dei costrutti del linguaggio quali array(), echo, empty(), eval(), exit(), isset(), list(), print(), unset().

I parametri di chiamata di metodi sono array contenenti, nell'ordine, il nome dell'oggetto ed il nome del metodo.

Ecco qualche esempio:


<?php
// Un esempio di funzione richiamabile
function my_callback_function() {
    echo nl2br("hello world!\n");
}

// Un esempio di metodo richiamabile
class MyClass {
    static function myCallbackMethod() {
        echo nl2br("Hello World!\n");
    }
}

// Type 1: Chiamata di funzione
call_user_func('my_callback_function');

// Type 2: Chiamata di metodo statico
call_user_func(array('MyClass', 'myCallbackMethod'));

// Type 3: Chiamata di metodo di oggetto
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Chiamata di metodo statico (Formato di PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Chiamata di metodo statico relativo (Formato di PHP 5.3.0)
class A {
    public static function who() {
        echo nl2br("A\n");
    }
}

class B extends A {
    public static function who() {
        echo nl2br("B\n");
    }
}

call_user_func(array('B', 'parent::who')); // A

// Type 6: Oggetti che implementano il metodo __invoke possono essere usati come callables
           (dalla versione PHP 5.3)
class C {
    public function __invoke($name) {
        echo nl2br("Hello ". $name. "\n");
    }
}

$c = new C();
call_user_func($c, 'PHP!');
?>
hello world!
Hello World!
Hello World!
Hello World!
A
Hello PHP!

Un esempio di richiamata usando una "Closure"


<?php
// La nostra chiusura
$double = function($a) {
    return $a * 2;
};

// Questo è il nostro intervallo di numeri
$numbers = range(1, 5);

/* Uso la  closure come una callback per raddoppiare il valore di ognuno degli elementi nel 
nostro range
*/
$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);
?>
2 4 6 8 10