PHP 5.3+ 隔離類別與函式,避免命名衝突。
namespace Test5; function test() { echo __FILE__; }
namespace Test6; function test() { echo __FILE__; }
// 呼叫
Test5\test(); Test6\test();
spl_autoload_register('autoload1');
function autoload1($class) { require __DIR__.'/'.$class.'.php'; }
class Database {
function where($where) { return $this; }
function order($order) { return $this; }
function limit($limit) { return $this; }
}
$db = new Database();
$db->where('id=1')->order('id')->limit(1);
__get/__set:攔截不可見屬性存取__call/__callStatic:攔截不可見方法呼叫__toString:物件轉字串__invoke:物件當函式呼叫class Factory {
static function createDatabase() { return new Database(); }
}
$db = Factory::createDatabase();
class Database {
protected static $db;
private function __construct() {}
static function getInstance() {
if (self::$db) return self::$db;
self::$db = new self(); return self::$db;
}
}
$db = Database::getInstance();
class Register {
protected static $objects;
static function set($alias, $object) { self::$objects[$alias] = $object; }
static function get($name) { return self::$objects[$name]; }
}
Register::set('db1', $db);
$db = Register::get('db1');
註冊樹解決全域共享與物件交換,任何地方可直接存取。