PHP开发面向对象考点

2021-10-12  本文已影响0人  一位先生_

PHP 魔术方法和触发场景:

__tostring()方法是在对象当作字符串输出时被自动调用   __invoke()方法是在对象当作方法时被自动调用

```

<?php

class Tomato{

public function __tostring()

{

return"string";    

 }

public function __invoke()

{

echo"invoke";    

 }

}  

$tomato = new Tomato();

echo $tomato;//对象当作字符串输出

$tomato();//对象当作方法

```

__call(),__callStatic()

__call()实现对方法的重载  __callStatic()实现对静态方法的重载 - implode()等价于spilt()方法

<?php

class Tomato {

public function __call($name, $arguments)

{

echo'$name:'.$name.'$arguments:'.implode(", ", $arguments);    

 }

public static function __callStatic($name, $arguments)

{

echo'$name:'.$name.'$arguments:'.implode(", ", $arguments);    

 } 

 }

 $tomato->runSet("Allo","Bllo");//类内部没有该方法,是通过__call()重载实现的

Tomato::deRunSet("Cllo","Dllo");//类内部没有该静态方法,是通过__callStatic()重载实现的

?>

```

__get(),__set()__isset(),__unset(),__empty()

- 获取对象属性时__get()被自动调用,一般用于获取私有属性 - 设置对象属性时__set()被自动调用 - isset判断是否存在该属性,empty相反 - 释放变量时__unset(),被自动调用

<?php

class Tomato {

private $name ="火星情报局";

public function __get($name)

{

//参数为属性名

if(isset($name)){ //isset判断是否存在该属性,与empty相反echo"存在";

echo$this->name;          

}else{

return null;          

}    

 }

public function __set($name, $value){

//参数为 属性名、属性值

echo $this->$name = $value;//设置属性

}

public function __unset($name){

//释放属性变量时,被自动调用

echo"null";   

 } 

$tomato->name;//获取元素属性

$tomato->name ="提莫队长";//设置元素属性

unset($tomato->name);//释放变量

?>

```

__clone()

__clone(),在对象被克隆时调用 - 克隆后的对象具有与原对象相同的所有属性、方法 - 克隆后的对象属性的改变不影响原对象,即互不影响 __clone()方法内部可以设置哪些属性不必克隆,用自己设置即可

<?php

class Tomato {

private $name ="火星情报局";

private $title ="沈梦晨";

private $data ="2016";

public function __clone()

{

echo $this->name ="老坛酸菜";

//该属性不必克隆,用自己设置的

$tomato2 =clone$tomato;//克隆对象

$tomato2->data="2017";//通过克隆对象该变属性

$tomato->name;//获取原对象属性

$tomato->title;//原对象属性

$tomato->data;//获取原对象属性,发现没有改变

$tomato2->name;//获取现对象属性

$tomato2->title;//克隆对象属性,与原对象不一样

$tomato2->data;//获取克隆对象属性,发现改变

?>

```

综上,克隆后的对象属性的改变不影响原对象

克隆的过程中,可以自己设置自己的值,没必要完全克隆(根据实际情况)

PHP设计模式:

工厂模式

单例模式

注册数模式

适配器模式

观察者模式

策略模式

上一篇 下一篇

猜你喜欢

热点阅读