您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
php的trait别名同时修改访问控制
发布时间:2021-09-24 19:55:52编辑:雪饮阅读()
就说上篇实现了trait修改访问控制,其实use的trait除了单独别名和修改访问控制,也可以两者一起做。
test.php:
<?php
trait Animal{
public function eat(){
echo "This is Animal eat";
}
}
class Cat{
use Animal{
Animal::eat as private eaten;
}
}
$cat = new Cat();
//正常运行,不会修改原先的访问控制
$cat->eat();
$cat->eaten();//报错,已经改成了私有的访问控制
?>
trait Animal{
public function eat(){
echo "This is Animal eat";
}
}
class Cat{
use Animal{
Animal::eat as private eaten;
}
}
$cat = new Cat();
//正常运行,不会修改原先的访问控制
$cat->eat();
$cat->eaten();//报错,已经改成了私有的访问控制
?>
这里运行必然就是会报错的:
C:\Users\Administrator\PhpstormProjects\untitled\organizing>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe C:\Users\Administrator\PhpstormProjects\untitled\test.php
This is Animal eat
Fatal error: Uncaught Error: Call to private method Cat::eaten() from context '' in C:\Users\Administrator\PhpstormProjects\untitled\test.php on line 16
Error: Call to private method Cat::eaten() from context '' in C:\Users\Administrator\PhpstormProjects\untitled\test.php on line 16
Call Stack:
0.0002 395392 1. {main}() C:\Users\Administrator\PhpstormProjects\untitled\test.php:0
那么同样的,我们也可以别名并修改为public:
test.php:
于是再次能执行成功了:
trait Animal{
public function eat(){
echo "This is Animal eat";
}
}
class Cat{
use Animal{
Animal::eat as public eaten;
}
}
$cat = new Cat();
$cat->eat();
$cat->eaten();
?>
C:\Users\Administrator\PhpstormProjects\untitled\organizing>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe C:\Users\Administrator\PhpstormProjects\untitled\test.php
This is Animal eatThis is Animal eat
关键字词:php,trait,访问控制