《php核心技术与最佳实践》笔记2

关于php中的魔术方法

魔术方法是以"__"开头的、具有特殊作用的一些方法​,可以看做php的语法糖。语法糖定义,还有语法盐,语法糖精,维基百科上都有。

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

__construct()方法用于创建对象时对对象的属性进行赋值。可以进行一些初始化操作,比如连接数据库。​__destruct方法是析构函数

对于私有属性是无法直接通过$student->name这种方法获得或设置的,但是可以添加__get和__set方法,这样就可以在类外部调用了。__get($name) __set($name,$value)。参数中的$name应该是不可以写成别的。这两种方法归为PHP的重载,PHP中的重载指动态的创建类的属性和方法,与JAVA中的不同。有了这两个方法,即使这个属性不存在也不会报错,从这里发现这个思路与语法盐是背离的。需要理解的是,这两个方法是隐式调用的。

__call和__callStatic方法 ​__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。__call($funcname, $arguments),__callStatic($funcname, $arguments),感觉用法很灵活,具体可以看

里面学到了几个方法,get_called_class()获取静态调用方法调用的类。list()用数组为一系列变量赋值。in_array()方法判断一个值是否在数组中。同时静态的方法通过类名::方法名来调用而不是->,内部使用self::或者parent::对于书中提到实现将strlen(trim($str))调用变成$str->trim()->strlen()的调用方式,我自己写了一下代码,感觉自己吊吊哒。代码如下``

class myString {
	public $str;
	public function __construct($str){
		$this->str=$str;
	}
	public function __call($fun,$args){
		switch($fun){
			case 'trim':
				$this->str=trim($this->str);
				return $this;
			case 'strlen':
				return strlen($this->str);
				break;
		}
	}
}
	$a=new myString(' xiaoming ');
	
	echo $a->trim()->strlen();


__toString()魔术方法其实和java里面的toString是类似的,可以再echo的时候自动调用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值