類是對(duì)一個(gè)東西的描述屿笼,對(duì)象是根據(jù)這個(gè)描述實(shí)現(xiàn)出來的東西丧叽。
類在PHP中表現(xiàn)的形式是 class
,對(duì)象的表現(xiàn)形式是 object
期虾。
一個(gè)類中可以有自己的常量积蜻、變量(稱之為屬性)、函數(shù)(稱之為方法)彻消。
// 我是一個(gè) '人' 的類
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>";
}
}
// 我是一個(gè) '人' 的對(duì)象,這步操作也叫實(shí)例化
$people = new People('劉國際', 26);
// 說句話看看
$people->say();
在類的普通方法(非靜態(tài))中使用 $this
變量可以獲取到當(dāng)前類的實(shí)例對(duì)象宙拉,但記得不要嘗試去修改它宾尚。
通過 new
關(guān)鍵字可以將一個(gè) class
類實(shí)例化,得到一個(gè)對(duì)象谢澈。
當(dāng)把一個(gè)對(duì)象賦值給另一個(gè)變量時(shí)煌贴,默認(rèn)便是引用賦值, 可以通過 clone
關(guān)鍵進(jìn)行傳值賦值锥忿,也就是克隆一個(gè)新的對(duì)象牛郑。
// 克隆一個(gè)對(duì)象
$temp = clone $people;
上例中展示了一般情況下創(chuàng)建實(shí)例對(duì)象的方法,但還可以通過一些別的方式來創(chuàng)建對(duì)象敬鬓。
// 創(chuàng)建一個(gè)對(duì)象
$className = "People";
$temp1 = new $className("劉德華", 55);
var_dump($temp1);
// 創(chuàng)建一個(gè)對(duì)象
$temp2 = new $temp1("張學(xué)友", 50);
var_dump($temp2);
再看一些創(chuàng)建對(duì)象的方法
// 定義類
class Foo{
public $name = "iGuoji";
public static function byStatic(){
return new static;
}
}
// 實(shí)例化
$foo = new Foo();
// 通過方法實(shí)例化
$fooStatic = Foo::byStatic();
// 兩者都是 Foo類 的實(shí)例
($foo instanceof Foo) and ($fooStatic instanceof Foo);
($foo instanceof $fooStatic) and ($fooStatic instanceof $foo);
// 兩者相等淹朋,但不絕對(duì)相等
($foo == $fooStatic) and ($foo !== $fooStatic);
// 定義類
class Bar extends Foo{
public function bySelf(){
return new self;
}
// 創(chuàng)建父類的對(duì)象
public function byParent(){
return new parent;
}
}
// 實(shí)例化
$bar = new Bar();
// 通過方法實(shí)例化
$barStatic = Bar::byStatic();
$barSelf = Bar::bySelf();
$barParent = Bar::byParent();
// 前三者都是 Bar類 的實(shí)例
($bar instanceof Bar) and ($barStatic instanceof Bar) and
($barSelf instanceof Bar);
// 四者都是 Foo類 的實(shí)例
($bar instanceof Foo) and ($barStatic instanceof Foo) and
($barSelf instanceof Foo) and ($barParent instanceof Foo);
// 除了第四個(gè)外,其他都相等
$bar != $barParent;
// 第四個(gè)和之前的 Foo類 實(shí)例相等
$barParent == $foo;