5月1日作业
将本周的学习重点,如继承, 抽象类, trait笔记整理好
实例演示后期静态绑定的原理与实现
实例演示属性重载/拦截器的所有方法
实例演示方法重载/拦截器的所有方法
[选做]仿写课堂上的数据查询构造器, 多写几个方法试试看
<?php
abstract class work
{
public static function create() :self
{
return new static();
}
}
class demo1 extends work
{
}
class demo2 extends work
{
}
$demo1= demo1::create();
var_dump($demo1);
echo '<br>';
$demo2= demo2::create();
var_dump($demo2);
属性查询拦截器
class work
{
private $a;
private $b;
public function __construct($a,$b)
{
$this->a=$a;
$this->b=$b;
}
public function __get($property)
{
return $this->$property;
}
}
$work= new work('我是a','我是b');
echo $work->a;
echo $work->b;
属性检测拦截器
class work
{
private $a;
private $b;
public function __construct($a,$b)
{
$this->a=$a;
$this->b=$b;
}
public function __set($property,$value)
{
$method='get'.ucfirst($property);
return method_exists($this,$method)?$this->$method():null;
}
public function seta($value)
{
return mb_substr($this->a,0,2);
}
public function setb($value)
{
return $this->b;
}
public function __isset($property)
{
return $property==='a'?isset($this->a):false;
}
}
$work= new work('我是a','我是b');
echo $work->a='我是a';
echo $work->b ='我是b';
echo '<br>';
echo isset($property->a)?'存在':'不存在';
静态方法拦截器和方法拦截器
<?php
class user
{
public function __call($name,$args)
{
printf('方法名:%s是,参数:[%s]',$name,implode(',',$args));
}
public static function __callStatic($name, $arguments)
{
printf('方法名:%s是,参数:[%s]',$name,implode(',', $arguments));
}
}
$user =new user();
$user->demo(1,2,3,4);
echo '<br>';
$user::demo(1,2,3,4);
感想:已经讲到上传文件了,刚开始学拦截器,有点跟不上了。而且也做不到举一反三,只能先模拟老师的了。感觉还是挺难的。希望自己能坚持下来。黎明前的黑暗?