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,
<?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($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
require $fileName;
}
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
?>
<?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";
?>
since version 5.4
regex:
find regexp: ([^_a-z]{1})array\(([a-zA-Z0-9_"'\s,\[\]=>\$+-\\]*)\) replace: $1[$2];