博客列表 >PHP魔术方法大全,灵活使用实战盘点,开发者TEMO真是脑洞大开~

PHP魔术方法大全,灵活使用实战盘点,开发者TEMO真是脑洞大开~

张福根一修品牌运营
张福根一修品牌运营原创
2020年12月08日 17:50:09722浏览

get,set,call,callStatic魔术方法的实例

实例效果:

魔术方法的实例

实例源码:

一、魔术方法:construct:

  1. class Product{
  2. public $name = '鞋子';
  3. public $price = '99';
  4. public function __construct($name,$price){
  5. $this->name = $name;
  6. $this->price = $price;
  7. }
  8. }
  9. $p = new Product("帽子",33);
  10. echo '商品:'. $p->name.'<br>';
  11. echo '价格:'.$p->price.'元';

二、魔术方法:__get:

  • __get:根据属性名称动态地生成对应的属性访问接口名称
  • ucfirst() 函数把字符串中的首字符转换为大写
  • method_exists — 检查类的方法是否存在
  1. class Credit {
  2. private $idNum;
  3. private $age;
  4. public function __construct($idNum,$age){
  5. $this->idNum = $idNum;
  6. $this->age = $age;
  7. }
  8. public function __get($name){
  9. $method = 'get'.ucfirst($name);
  10. return method_exists($this,$method) ? $this->$method():null;
  11. }
  12. private function getIdNum(){
  13. return isset($this->idNum) ? '....'.mb_substr($this->idNum,2,3) : '身份证不合法';
  14. }
  15. private function getAge(){
  16. return isset($this->age) ? $this->age : '年龄不合法';
  17. }
  18. }
  19. $p = new Credit('202015198504054144',30);
  20. echo $p->idNum.'<br>';
  21. echo $p->age.'<br>';

三、使用__set()魔术方法:

  • 将用户对属性的更新操作进行重定向
  1. class Credit{
  2. private $idNum;
  3. private $age;
  4. public function __construct($idNum,$age){
  5. $this->idNum = $idNum;
  6. $this->age = $age;
  7. }
  8. public function __set($name,$value){
  9. $method = 'set' . ucfirst($name);
  10. return method_exists($this,$method) ? $this->$method($value):null;
  11. }
  12. private function setIdNum($value){
  13. return $this->idNum = strlen($value) == 18 ? $value : null;
  14. }
  15. private function setAge($value){
  16. return $this->age = $value>0 && $value<200 ? $value :null;
  17. }
  18. }
  19. $p->idNum = '341215198504054148';
  20. echo $p->idNum.'<br>';
  21. $p->age = 30;
  22. echo $p->age;

四、方法重载 (方法拦截器):call,callStatic

  • 方法重载 (方法拦截器):call,callStatic,PHP中的魔术方法,是系统在特定时刻自动- 在类内部调用本类当中的一个不可访问的方法时,不管是对象方式,还是静态方式,都只能触发__call()方法
  • 在类外部调用一个类中的一个不可访问的方法时,对象方式就触发call()方法,静态方式就触发callStatic()方法
  • printf() 函数输出格式化的字符串。
  1. class User{
  2. public function __call(string $name,array $args){
  3. printf('方法名:%s(),参数[%s]',$name,implode(',',$args));
  4. }
  5. public static function __callStatic(string $name,array $args){
  6. printf('方法名:%s(),参数[%s]',$name,implode(',',$args));
  7. }
  8. }
  9. $user = new User;
  10. $user->hello('z','f','g');
  11. echo '<hr>';
  12. User::demo(2011,2012,2013);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议