1. instanceof关键字的用法
instanceof的作用有2个:
- 判断一个对象是否是某个类的实例
- 判断一个对象是否实现了某个接口
(1) 判断一个对象是否是某个类的实例
<?php
class Itbook{
}
class Phpbook extends Itbook{
private $bookname;
}
$book = new Phpbook();
if($book instanceof Phpbook){
echo '$book属于Phpbook类<br>';
}
if($book instanceof Itbook){
echo '$book属于Itbook类';
}
(2) 判断一个对象是否实现了某个接口
<?php
interface TestInterface
{
public function interfaceMethod();
}
class TestClass implements TestInterface
{
public function interfaceMethod()
{
return 'cyy is cute.';
}
}
$test = new TestClass();
if ($test instanceof TestInterface) {
echo '$test实现接口TestInterface';
} else {
echo '$test没有实现接口TestInterface';
}
2 什么是抽象类?及抽象类的作用
什么是抽象类?
抽象类不能被实例化,同样方法也没有实现,只是提供方法声明,没有具体实现。抽象类只能作为其他类的父类使用。
抽象类和普通类也差不多,都有成员变量和成员方法。但还是有区别的。包含抽象方法的类必须本身是抽象的。抽象方法是没有方法体的,他的功能只能在子类中完成。
<?php
abstract class Member{
abstract function vipMember($name,$level);
}
class Member1 extends Member{
function vipMember($name,$level){
echo 'my name is '.$name.', my level is '.$level;
}
}
class Member2 extends Member{
function vipMember($name,$level){
echo 'my name is '.$name.', my level is '.$level;
}
}
$mem1 = new Member1();
$mem1->vipMember('cyy','1');
echo '<br>';
$mem1 = new Member1();
$mem1->vipMember('cyy2','2');
3 魔术方法__get()实例详解 在PHP中以两个下划线开头的方法,被称为"魔术方法"(Magic methods)。比如__construct(), __destruct (), __clone(),以及__call(),__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload()等,都是魔术方法。 如果希望PHP调用这些魔术方法,首先必须在类中定义,否则PHP不会执行未创建的魔术方法。 注意: 魔术方法是php中设置好的,所以不能自己去创建,只能用php中本来就存在的,否则会报错。 __get()的作用为: __get():读取不可访问属性的值(private,protected,不存在)时,php就会执行__get()方法。
<?php
class Person{
public $name;
protected $age;
function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
function me(){
echo $this->name.' '.$this->age;
}
function __get($pro){
if(isset($this->$pro)){
return $this->$pro;
}else{
echo '属性值:'.$pro.'不存在';
}
}
}
$person = new Person('cyy',25);
$person->me();
echo '<br>';
echo $person->age;
|