Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:发明这个语言的人, 是不是快让人奔溃了
<?php
abstract class fulei
{
public static function fangfa()
{
return new static();
return $this->yinhangka;
return $this->zhanghu;
}
}
// 实现类1
class zahgnhu extends fulei
{
public $zhanghu = 'xiaofei';
}
// 实现类2
class shujv extends fulei
{
public $yinhangka = '工商银行';
}
// 客户端
$user = zahgnhu::fangfa();
var_dump($user);
echo '<hr>';
$product = shujv::fangfa();
var_dump($product);
class fulei1
{
// 静态方法: 允许重写
public static function index()
{
return '当前调用方法: ' . __METHOD__;
}
public static function fetch()
{
// static 代表调用类下面的方法 而非当前父类
return static::index();
}
}
class User extends fulei1
{
// 重写父类中的静态方法: index()
public static function index()
{
return '当前调用方法: ' . __METHOD__;
}
}
//打印结果为调用的USer 下面的index方法
echo User::fetch();
class lei
{
private $name;
private $gognzi;
// private $tichegn = 1;
public function __construct($name, $gognzi)
{
$this->name = $name;
$this->gognzi = $gognzi;
}
// 1. 属性查询拦截器
public function __get($ffmcbc)
{
$ffmc = 'get' . ucfirst($ffmcbc);
// 转发访问请求 method_exists判断有没有这个属性 $this所在的类/对象 $method属性名称 没有就返回null
return method_exists($this, $ffmc) ? $this->$ffmc() : null;
}
private function getName()
{
return mb_substr($this->name, 0, 2) . '..被折叠';
}
private function getGognzi()
{
return $this->gognzi + $this->tichegn;
}
// 2. 属性设置拦截器 public function __set(属性名称, 属性值)
public function __set($ffmcbc, $sxz)
{
// 方法名称保存到变量 ucfirst首字母大写
$ffmc = 'set' . ucfirst($ffmcbc);
// 转发访问请求 判断有没有这个属性 返回属性和值 没有返回null
return method_exists($this, $ffmc) ? $this->$ffmc($sxz) : null;
}
private function setName($sxz)
{
// 设置的新值
$this->name = trim($sxz);
}
private function setGognzi($sxz)
{
// 判断值是否等于空 等于空则删除值 否则输出工资
if ($sxz === null) unset($this->gognzi);
else $this->gognzi = trim($sxz);
}
// 3. 属性检测拦截器 public function __isset($属性名)
public function __isset($sxm)
{
return $sxm === 'gognzi' ? isset($this->gognzi) : false;
}
// 4. 属性销毁拦截器 public function __unset($属性名)
public function __unset($sxm)
{
if ($sxm === 'gognzi') {
$sxmbl = 'set' . ucfirst($sxm);
// 转发访问请求
if (method_exists($this, $sxmbl)) return $this->$sxmbl(null) ;
}
}
}
// 客户端
$product = new lei('王小飞', 50000);
echo $product->name;
echo $product->gognzi;
echo '<hr>';
$product->name = '李三';
$product->gognzi = 10000;
echo $product->name;
echo $product->gognzi;
echo '<hr>';
echo isset($product->name) ? '存在' : '不存在';
echo isset($product->gognzi) ? '存在' : '不存在';
echo '<hr>';
unset($product->name);
echo $product->name;
unset($product->gognzi);
echo $product->gognzi;
class User
{
// 方法拦截器public function __call($方法名称, $参数值数组)
public function __call($name, $arguments)
{
// implode 把数组拼装成字符串
printf('方法名: %s , 参数: [%s]', $name, implode(', ', $arguments));
}
// 静态方法拦截器
public static function __callStatic($name, $arguments)
{
printf('静态方法名: %s , 参数: [%s]', $name, implode(', ', $arguments));
}
}
$user = new User();
$user->demo('张小飞',2,3,4);
echo '<br>';
User::demo(6,7,8,900);
总结:越往后学基础越重要,要不然学新知识里面的旧知识都看不懂。