類是對一個東西的描述,對象是根據(jù)這個描述實現(xiàn)出來的東西。
類在PHP中表現(xiàn)的形式是 class
,對象的表現(xiàn)形式是 object
。
一個類中可以有自己的常量、變量(稱之為屬性)、函數(shù)(稱之為方法)。
// 我是一個 '人' 的類
class People{
// 屬性列表
public $name;
public $age;
// 構(gòu)造方法
public function __construct(string $n, int $a){
$this->name = $n;
$this->age = $a;
}
// 方法列表
public function say(){
echo "<p>我叫:{$this->name}</p>";
echo "<p>今年:{$this->age} 歲</p>";
}
public function eat(){
echo "<p>我需要吃飯喝水</p>";
}
public function sleep(){
echo "<p>我需要睡覺</p>";
}
}
// 我是一個 '人' 的對象,這步操作也叫實例化
$people = new People('劉國際', 26);
// 說句話看看
$people->say();
在類的普通方法(非靜態(tài))中使用 $this
變量可以獲取到當(dāng)前類的實例對象,但記得不要嘗試去修改它。
通過 new
關(guān)鍵字可以將一個 class
類實例化,得到一個對象。
當(dāng)把一個對象賦值給另一個變量時,默認(rèn)便是引用賦值, 可以通過 clone
關(guān)鍵進(jìn)行傳值賦值,也就是克隆一個新的對象。
// 克隆一個對象
$temp = clone $people;
上例中展示了一般情況下創(chuàng)建實例對象的方法,但還可以通過一些別的方式來創(chuàng)建對象。
// 創(chuàng)建一個對象
$className = "People";
$temp1 = new $className("劉德華", 55);
var_dump($temp1);
// 創(chuàng)建一個對象
$temp2 = new $temp1("張學(xué)友", 50);
var_dump($temp2);
再看一些創(chuàng)建對象的方法
// 定義類
class Foo{
public $name = "iGuoji";
public static function byStatic(){
return new static;
}
}
// 實例化
$foo = new Foo();
// 通過方法實例化
$fooStatic = Foo::byStatic();
// 兩者都是 Foo類 的實例
($foo instanceof Foo) and ($fooStatic instanceof Foo);
($foo instanceof $fooStatic) and ($fooStatic instanceof $foo);
// 兩者相等,但不絕對相等
($foo == $fooStatic) and ($foo !== $fooStatic);
// 定義類
class Bar extends Foo{
public function bySelf(){
return new self;
}
// 創(chuàng)建父類的對象
public function byParent(){
return new parent;
}
}
// 實例化
$bar = new Bar();
// 通過方法實例化
$barStatic = Bar::byStatic();
$barSelf = Bar::bySelf();
$barParent = Bar::byParent();
// 前三者都是 Bar類 的實例
($bar instanceof Bar) and ($barStatic instanceof Bar) and
($barSelf instanceof Bar);
// 四者都是 Foo類 的實例
($bar instanceof Foo) and ($barStatic instanceof Foo) and
($barSelf instanceof Foo) and ($barParent instanceof Foo);
// 除了第四個外,其他都相等
$bar != $barParent;
// 第四個和之前的 Foo類 實例相等
$barParent == $foo;