php內(nèi)置標準類
-
基本介紹
php中有一個類 stdClass顿锰,不需要創(chuàng)建就可以使用,通撑堇可以使用它來以對象的形式管理我們的數(shù)據(jù)捂掰。
-
代碼
$person = new stdClass(); $person->name = '悟空'; $person->ability = '72變化'; var_dump($person); echo 'name = ' . $person->name;
其它數(shù)據(jù)類型轉(zhuǎn)對象
-
基本介紹
在某些情況下,需要把其它的數(shù)據(jù)類型(int, float, array 等等)轉(zhuǎn)成對象形式想括、
-
代碼
$heros = array('no1' => '悟空', 'no2' => '八戒', 'no3' => '沙僧'); $hero_obj = (object)$heros; var_dump($hero_obj); // object(stdClass)#1 (3) { ["no1"]=> string(6) "悟空" ["no2"]=> string(6) "八戒" ["no3"]=> string(6) "沙僧" } $age = 90; $age_obj = (object)$age; var_dump($age_obj); // object(stdClass)#2 (1) { ["scalar"]=> int(90) } $null = null; $null_obj = (object)$null; var_dump($null_obj); // object(stdClass)#3 (0) { }
因此將其它數(shù)據(jù)類型轉(zhuǎn)成對象時陷谱,將成為 stdClass 對象實例;
如果是一個關(guān)聯(lián)數(shù)組,在轉(zhuǎn)成對象后會自動將
key
變成屬性名稱
烟逊,將value
變成屬性的值
渣窜;如果是 int,string宪躯,float 類型的乔宿,在轉(zhuǎn)成對象后,屬性名為
scalar
访雪,屬性值為轉(zhuǎn)成對象前的值详瑞;如果是 null,在轉(zhuǎn)成對象后變成空對象
對象轉(zhuǎn)字符串
__toString()方法用于一個類被當做字符串時應(yīng)怎樣回應(yīng)冬阳。
例如 echo $obj;應(yīng)該顯示什么。此方法必須返回一個字符串党饮,否則將發(fā)出一個致命錯誤肝陪。
小案例:
// 當 echo 對象名; 返回該類的相關(guān)信息,比如類名刑顺,所有函數(shù)和所有屬性
class Dog
{
public $name;
protected $age;
private $lover;
public function __construct($name, $age, $lover)
{
$this->name = $name;
$this->age = $age;
$this->lover = $lover;
}
protected function cry()
{
echo '汪汪叫';
}
// 魔術(shù)方法
public function __toString()
{
// 使用反射類來實現(xiàn)
$reflect_class = new ReflectionClass($this);
echo '<br>類名 = ' . $reflect_class->getName();
echo '<br>類的方法有:';
$method_list = $reflect_class->getMethods();
print_r($method_list);// 打印出對象數(shù)組
// Array ( [0] => ReflectionMethod Object ( [name] => __construct [class] => Dog ) [1] => ReflectionMethod Object ( [name] => cry [class] => Dog ) [2] => ReflectionMethod Object ( [name] => __toString [class] => Dog ) )
echo '<br>類的屬性有:';
$property_list = $reflect_class->getProperties();
print_r($property_list);// 打印出對象數(shù)組
// Array ( [0] => ReflectionProperty Object ( [name] => name [class] => Dog ) [1] => ReflectionProperty Object ( [name] => age [class] => Dog ) [2] => ReflectionProperty Object ( [name] => lover [class] => Dog ) )
// 如果取出 大黃狗
echo '<br>' . $property_list[0]->getValue($this);
return '';
}
}
$dog = new Dog('大黃狗', 45, '小花狗');
// 需要輸出 Dog 類的相關(guān)信息
echo $dog;
trait
-
基本介紹(手冊)
? 自 PHP 5.4.0 起氯窍,PHP 實現(xiàn)了代碼復(fù)用的一個方法,稱為 traits蹲堂。
? Traits 是一種為類似 PHP 的單繼承語言而準備的代碼復(fù)用機制狼讨。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨立的類中復(fù)用方法集柒竞。Traits 和類組合的語義是定義了一種方式來減少復(fù)雜性政供,避免傳統(tǒng)多繼承和混入類(Mixin)相關(guān)的典型問題。
? Trait 和一個類相似朽基,但僅僅旨在用細粒度和一致的方式來組合功能布隔。Trait 不能通過它自身來實例化。它為傳統(tǒng)繼承增加了水平特性的組合稼虎;也就是說衅檀,應(yīng)用類的成員不需要繼承。
-
代碼
trait Abc { public function getSum($n1, $n2) { return $n1 + $n2; } } class A { // 引入Abc trait use Abc; public function test() { echo '<br> A test()'; } } class B { public function getVal() { echo '<br> B getVal()'; } } $a = new A(); echo $a->getSum(10, 20);
-
traits細節(jié)說明:
trait不能被實例化霎俩;
優(yōu)先級:如果我們的父類和trait有相同的方法時哀军,以trait定義的方法為準。