Namespaces

PHP namespace manual articolo originale

con i namespaces puoi definire classi funzioni e costanti con nomi generici in diverse librerie es. A\Controller e B\Controller. una libreria sotto namespace non ha i nomi nel global namespace,

  • va importata ( use A; )
  • referenziata direttamete (A\controller::run())
  • dichiarato il file corrente come parte dello stesso namespace da cui si vuole attingere funzioni. le funzioni con lo stesso nome di altri namespace andranno richiamate per nome esteso

autoload

<?php
use App\Lib1\MyClass as MC// class App\Lib1\MyClass aliased as MC
$obj = new MC(); // translated to new App\Lib1\MyClass()
echo $obj->WhoAmI();
// autoload function
function __autoload($class) {
    
// convert namespace to full file path
    // $class is "App\Lib1\MyClass"
    $class 'classes/' str_replace('\\''/'$class) . '.php';
    
// file "classes/App/Lib1/MyClass.php"
    require_once($class);
}
?>

versione standard interoperabile versione OOP

function autoload($className) {
    
$className ltrim($className'\\');
    
$fileName  '';
    
$namespace '';
    if (
$lastNsPos strripos($className'\\')) {
        
$namespace substr($className0$lastNsPos);
        
$className substr($className$lastNsPos 1);
        
$fileName  str_replace('\\'DIRECTORY_SEPARATOR$namespace) . DIRECTORY_SEPARATOR;
    }
    
$fileName .= str_replace('_'DIRECTORY_SEPARATOR$className) . '.php';
    require 
$fileName;
}

namespace constant

namespace e NAMESPACE sono il namespace corrente

<?php
namespace App\Lib1;
class 
MyClass {
    public function 
WhoAmI() {
        return 
__METHOD__;
    }
}

// modo 1
$m = new namespace\MyClass;
echo 
$m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI

// modo 2
$c __NAMESPACE__ '\\MyClass';
$m = new $c;
echo 
$m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI

?>

aliases

<?php
use App\Lib1 as L;
use 
App\Lib2\MyClass as Obj;
header('Content-type: text/plain');
require_once(
'lib1.php');
require_once(
'lib2.php');
echo 
L\MYCONST "\n";
echo 
L\MyFunction() . "\n";
echo 
L\MyClass::WhoAmI() . "\n";
echo 
Obj::WhoAmI() . "\n";
?>

short array syntax

since version 5.4

regex:

find regexp:
    ([^_a-z]{1})array\(([a-zA-Z0-9_"'\s,\[\]=>\$+-\\]*)\)
replace:
    $1[$2];