PHP面向对象的工具

一、OOP的魔术工具

1、 __set()
  给一个未定义的属性赋值时,或者给一个没有访问权限的属性赋值时,会调用__set()方法

2、__get()
  当访问一个私有属性时,此方法会被自动调用

3、__autoload()
  自动包含类文件,灵活引入类文件

4、__call()
  可以屏蔽调用函数不存在的错误

5、__toString()
   可以将对象以字符串的形式打印出来,该函数必须返回一个字符串

6、__clone()
  在执行克隆操作时,会执行__clone()里的操作,里面的$this是副本的对象

class Book{
	private $name;
	private $price;
	public function __construct($name,$price){
		$this->name = $name;
		$this->price = $price;
	}
	//访问一个私有权限或者没有定义的属性,调用此函数
	public function __set($key,$value){
		$this->$key = $value;
	}
	//访问一个私有权限的属性,调用此函数
	public function __get($key){
		return $this->$key;
	}
	//访问一个不存在的方法时,调用此函数
	public function __call($method,$args){
		echo $method.'方法不存在';
	}
	//当对象使用字符串形式输出时,调用此函数
	public function __toString(){
		return '这是一个书籍的类';
	}
	//当一个对象被克隆时,调用此函数
	public function __clone(){
		echo '一个对象被克隆了';
		$this->name = '新书';
	}
}
//实例化一个对象
$book = new Book('书','15.00');

//通过__get()方法访问一个私有属性
echo $book->name;//输出 书

//通过__set()方法设置一个私有属性
$book->name = '旧书';
echo $book->name;//输出 旧书

//尝试访问一个不存在的方法,会调用__call()方法
$book->setName();//输出 方法不存在

//输出对象
echo $book;//输出 这是一个书籍的类

//克隆一个对象,会调用__clone()方法,改变了新书的名字
$book2 = clone($book);
echo $book2->price;//和原书的价格一样 15.00
echo $book2->name;//输出 新书 

二、类函数和对象函数

1、class_exists()
  检查类是否存在

2、get_class()
  获取对象的类名

3、get_class_methods()
  获取类中公共的方法,参数为字符串类名或者对象变量

4、get_class_vars()
  获取类中公共的属性

5、get_parent_class(‘NoteComputer’)
  获取一个类的父类,参数为字符串类名或者对象变量

6、interface_exists(‘Person’)
   判断接口是否存在

7、is_a()
  判断对象是否属于这个类,或者判断这个对象的父类是否属于这个类

8、is_subclass_of()
  判断对象是否是这个类的子类

9、method_exists()
  判断对象是否有这个方法

//声明一个车类
class Car{
	public $price;		//价格
	private $weight;	//重量

	public function move(){
		echo '车子启动';
	}

	private function stop(){
		echo '停车';
	}
}
//声明一个自动汽车类,并继承车类
class AutoCar extends Car{

}
$car = new AutoCar();

//检查类是否存在
var_dump(class_exists('Car'));//结果为 bool(true)

//获取对象的类名
echo get_class($car);//结果为 AutoCar

//获取类中的公共方法
print_r(get_class_methods('AutoCar'));
print_r(get_class_methods($car));
//结果都为Array ( [0] => move )

//获取类中的公共属性
print_r(get_class_vars('AutoCar'));
//结果为Array ( [price] => )

//获取类的父类
echo get_parent_class('AutoCar');
echo get_parent_class($car);
//结果都为  Car

//判断接口是否存在
var_dump(interface_exists('Computer'));//结果为 bool(true)

//判断对象是否属于这个类,或者判断这个对象的父类是否属于这个类
var_dump(is_a($car,'AutoCar'));//结果为 bool(true)
var_dump(is_a($car,'Car'));//结果为 bool(true)

//判断对象是这个类的子类
var_dump(is_subclass_of($car,'Car'));//结果为 bool(true)

//判断对象是否有某种方法,公有,私有都可以判断
var_dump(method_exists($car,'stop'));//结果为 bool(true)

我的小站

更多技术内容分享,更多有趣内容,那就请移步我的小站 [无痕小站]

猜你喜欢

转载自blog.csdn.net/kelinfeng16/article/details/82714276