博主信息
博文 65
粉丝 2
评论 0
访问量 74987
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP魔术方法大全,灵活使用实战盘点,开发者TEMO真是脑洞大开~
张福根一修品牌运营
原创
920人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学