类是对一个东西的描述,对象是根据这个描述实现出来的东西。
类在PHP中表现的形式是 class
,对象的表现形式是 object
。
一个类中可以有自己的常量、变量(称之为属性)、函数(称之为方法)。
// 我是一个 '人' 的类
class People{
// 属性列表
public $name;
public $age;
// 构造方法
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();
在类的普通方法(非静态)中使用 $this
变量可以获取到当前类的实例对象,但记得不要尝试去修改它。
通过 new
关键字可以将一个 class
类实例化,得到一个对象。
当把一个对象赋值给另一个变量时,默认便是引用赋值, 可以通过 clone
关键进行传值赋值,也就是克隆一个新的对象。
// 克隆一个对象
$temp = clone $people;
上例中展示了一般情况下创建实例对象的方法,但还可以通过一些别的方式来创建对象。
// 创建一个对象
$className = "People";
$temp1 = new $className("刘德华", 55);
var_dump($temp1);
// 创建一个对象
$temp2 = new $temp1("张学友", 50);
var_dump($temp2);
再看一些创建对象的方法
// 定义类
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;
}
// 创建父类的对象
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;
网友评论