PHP 重载 属性重载__set() __get() __isset() __unset() 方法重载__call() __callStatic()


前言

本文就介绍了PHP类的重载的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、重载

  • 重载是指动态的创建类的属性和方法。
  • 通过魔术方法来实现的。这些魔术方法的参数都不能通过引用传递。
  • 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
  • 所有的重载方法都必须被声明为 public。

二、属性重载

  • __set():在给不可访问属性赋值时,会调用该方法。public __set ( string $name , mixed $value ) : void
  • __get():读取不可访问属性的值时,会调用该方法。public __get ( string $name ) : mixed
  • __isset():当对不可访问属性调用 isset() 或 empty() 时,会调用该方法。public __isset ( string $name ) : bool
  • __unset():当对不可访问属性调用 unset() 时,会调用该方法。public __unset ( string $name ) : void
  • 属性重载只能在对象中进行。
  • 在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。
class MyClass{
	private $data = array();
	function __set($name,$value){	//重载方法必须声明为public
		echo "Setting ".$name." to ".$value."<br>";
		$this->data[$name] = $value;
	}

	function __get($name){
		echo "Getting ".$name."<br>";
		if(array_key_exists($name, $this->data)){
			return $this->data[$name];
		}else{
			return "not found";
		}
	}

	function __isset($name){
		echo "Is ".$name." set?\n";
		return isset($this->data[$name]);
	}

	function __unset($name){
		echo "Unsetting ".$name."<br>";
		unset($this->data[$name]);
	}
}

$foo = new MyClass();
$foo->var1 = 1;				//会走类里的__set方法重载
echo "---------<br>";
echo $foo->var1."<br>";		//会走类里的__get方法
echo "---------<br>";
echo $foo->var2."<br>";		//会走类里的__get方法
echo "---------<br>";
var_dump(isset($foo->var1));		//会走类里的__isset方法
echo "<br>";
echo "---------<br>";
var_dump(isset($foo->var2));		//会走类里的__isset方法
echo "---------<br>";
unset($foo->var1);			//会走类里的__unset方法
echo "---------<br>";
echo $foo->var1."<br>";		//会走类里的__get方法

三、方法重载

  • __call():在对象中调用一个不可访问方法时,会调用该方法。public __call ( string $name , array $arguments ) : mixed
  • __callStatic():在静态上下文中调用一个不可访问方法时,会调用该方法。public static __callStatic ( string $name , array $arguments ) : mixed
  • $name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。
class MyClass{
	function __call($name,$arguments){
		echo "Calling object method '$name' arguments为:";
		var_dump($arguments);
	}

	static function __callStatic($name,$arguments){
		echo "Calling static method '$name' arguments为:" .implode(',', $arguments)."<br>";
	}
}

MyClass::MyFun1('hello world','你好');	//调用__callStatic方法,方法名为MyFun1,参数为一个数组array('hello world','你好');

$foo = new MyClass();
$foo->MyFun(['PHP','Java']);	//调用__call方法,方法名为MyFun,参数为array(array('PHP','java'))

总结

以上就是今天要讲的内容,本文仅仅简单介绍了PHP类的重载的基础方法。

  • 动态的创建类的属性和方法。
  • 通过魔术方法来实现的,参数不能通过引用传递。
  • 所有的重载方法必须声明为public。
  • 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
  • 属性的重载:__set(),__get(),__isset(),__unset()。
  • 方法的重载:__call(),__callStatic()。第一个参数为方法名,第二个参数为方法参数的枚举数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值