PHP物件導向深入研究之【名稱空間】與【自動載入類】
名稱空間
避免類名重複,而產生錯誤。
<?php
require_once "useful/Outputter.php";
class Outputter {
// output data
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
$obj = new Outputter(); // 同一名稱空間下,類名不能相同,預設名稱空間為空。空也是一種名稱空間。
$obj -> setName("Jack");
print $obj->getName();
//namespace useful; // 更改名稱空間,否則查詢不到Hello類,Fatal error: Class `myHello` not found
$hello = new Hello();
?>
<?php
// useful/Outputter.php
namespace useful; // 名稱空間
class Outputter {
//
}
class Hello {
}
?>
如何呼叫名稱空間中的類
<?php
namespace comgetinstanceutil;
class Debug {
static function helloWorld() {
print "hello from Debug
";
}
}
namespace main;
// comgetinstanceutilDebug::helloWorld(); // 找不到Debug類
comgetinstanceutilDebug::helloWorld(); // 加斜槓之後,就從根部去尋找了。
// outPut:hello from Debug
?>
使用use關鍵字
<?php
namespace comgetinstanceutil;
class Debug {
static function helloWorld() {
print "hello from Debug
";
}
}
namespace main;
use comgetinstanceutil;
//Debug::helloWorld(); //Fatal error: Class `mainDebug` not found
utilDebug::helloWorld();
?>
使用下面的處理,直接可以呼叫類
<?php
namespace comgetinstanceutil;
class Debug {
static function helloWorld() {
print "hello from Debug
";
}
}
namespace main;
use comgetinstanceutilDebug; // 直接使用到類
Debug::helloWorld();
?>
表示全域性
global.php
<?php
// no namespace
class Lister {
public static function helloWorld() {
print "hello from global
";
}
}
?>
<?php
namespace comgetinstanceutil;
require_once `global.php`;
class Lister {
public static function helloWorld() {
print "hello from ".__NAMESPACE__."
"; // __NAMESPACE__當前namespace
}
}
Lister::helloWorld(); // access local
Lister::helloWorld(); // access global
?>
輸出:
hello from comgetinstanceutil
hello from global
名稱空間加{}
<?php
namespace comgetinstanceutil {
class Debug {
static function helloWorld() {
print "hello from Debugn";
}
}
}
namespace main {
comgetinstanceutilDebug::helloWorld();
}
?>
output:
hello from Debug
全域性名稱空間
<?php
namespace { // 全域性空間
class Lister {
public static function helloWorld() {
print "hello from globaln";
}
}
}
namespace comgetinstanceutil {
class Lister {
public static function helloWorld() {
print "hello from ".__NAMESPACE__."n";
}
}
Lister::helloWorld(); // access local
Lister::helloWorld(); // access global
}
?>
__autoload 自動載入類
ShopProduct.php
<?php
class ShopProduct {
function __construct() {
print "ShopProduct constructor
";
}
}
?>
<?php
function __autoload( $classname ) { // 自動載入,根據類名載入類
include_once( "$classname.php" );
}
$product = new ShopProduct( `The Darkening`, `Harry`, `Hunter`, 12.99 );
?>
output:
ShopProduct constructor
進一步優化處理
<?phpclass business_ShopProduct // 這裡的類命名就要遵循規則了function __construct() print"business_ShopProduct constructor
";?><?phpfunction __autoload( $classname ) $pathstr_replace(`_`,DIRECTORY_SEPARATOR,$classname);// 智慧化處理require_once("$path.php");$xnew();$ynew();?>
相關文章
- PHP 物件導向 (三)名稱空間PHP物件
- 物件導向 -- 類的載入順序 類和物件的名稱空間物件
- PHP名稱空間與自動載入簡述PHP
- PHP名稱空間與PSR-4自動載入PHP
- PHP名稱空間及自動載入淺析PHP
- PHP 物件導向 (八)類的自動載入PHP物件
- PHP物件導向深入研究之【物件生成】PHP物件
- swift中的名稱空間及動態載入類Swift
- PHP物件導向深入研究之【高階特性】PHP物件
- PHP 名稱空間PHP
- PHP名稱空間PHP
- PHP物件導向深入研究之【組合模式與裝飾模式】PHP物件模式
- PHP框架中的檔案載入的實現(自動載入/PSR規範/名稱空間)PHP框架
- PHP 獲取不帶名稱空間的類名PHP
- 自研 PHP 框架 1.1_名稱空間PHP框架
- PHP 核心特性 - 名稱空間PHP
- PHP名稱空間概念解析PHP
- c#之.NET Framework 類庫_名稱空間C#Framework
- PHP 手冊 (類與物件) 學習筆記四:類的自動載入PHP物件筆記
- PHP物件導向深入研究之【繼承】,減少程式碼重複PHP物件繼承
- PHP 物件導向 (十一)反射類PHP物件反射
- PHP物件導向之&引用PHP物件
- Java物件導向——類與物件Java物件
- PHP 物件導向 final類與final方法PHP物件
- php名稱空間的呼叫順序PHP
- 【 PHP 學習筆記 】名稱空間PHP筆記
- [ PHP 學習筆記 ] 名稱空間PHP筆記
- php名稱空間namespace使用筆記PHPnamespace筆記
- 對於PHP中名稱空間概念的入門理解PHP
- php中的程式導向與物件導向PHP物件
- 名稱空間
- PHP 物件導向 (二)類屬性PHP物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- JAXB名稱空間及名稱空間字首處理
- PHP 類自動載入機制PHP
- PHP名稱空間(Namespace)的使用詳解PHPnamespace
- 物件導向之內部類物件
- Kubernetes 名稱空間入門