PHP__set和__get魔术方法

来源:互联网 发布:github源码在微信上 编辑:程序博客网 时间:2024/06/05 15:01

简介

php和java重载的对比

php的重载和java等语言的重载不同。java里,重载指一个类中可以定义参数列表不同。java里,重载只一个类中可以定义参数列表不同但名字相同的多个方法。比如,java、也有构造函数,java允许有多个构造函数,只要保证方法签名不一样就行,而PHP则在一个类中只允许有一个构造函数

php重载

php提供的重载指动态的创建类属性和方法。因此,__set和__get方法被归在重载里
若类中定义了这两个魔术方法,那么当给对象属性赋值活着取值时,即使这个属性不存在,也不会报错,一定程度上增强了程序的健壮性。

有了这两个魔术方法,是不是对私有属性的操作变得更方便了呢?

实际上并没有什么奇怪的,因为这两个方法本身就是public、的,她们和在对外的public、方法中操作private属性的远离是一样的,只不过这对魔术方法时期操作更简单,不需要显示的调用一个public的方法,因为这对魔术方法在操作类变量时是自动调用的。当然,也可以把类属性定义成public的,这样就可以随意在类的外部进行读写,不过如果知识为了方便,类属性在任意时候都定义成public、权限显然是不合适的,也不符合面向对象的设计思想

代码部分

错误代码

<?php    class Tuzi{        private $name;        private $age;    }    $tuzi = new Tuzi;    $tuzi->name;//会报错误

正确代码

<?phpclass Tuzi{    private $name;    private $age;    public function __set($name,$value){        $this -> $name = $value;    }    public function __get($name){        if(!isset($this->$name)){            echo "没有设置";            $this -> $name = "正在为你设置默认值";        }else{            return $this -> $name;        }    }}$tuzi = new Tuzi;$name = $tuzi -> name="tuzi";$age = $tuzi -> age = 20;echo $name."<br/>";echo $age;
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿童吃饭容易吐怎么办 宝宝吃饭会吐怎么办 小孩咳嗽还呕吐怎么办 咳嗽严重到呕吐怎么办 幼儿园中班不会写字怎么办 胃难受吐了怎么办 小孩不肯学写字怎么办 孩子不爱穿内裤怎么办 孩子长期不吃肉怎么办 小孩子不吃肉怎么办呢? 一年级小孩写字慢怎么办 听障碍放弃了怎么办 宝宝开始写字该怎么办 恢复的文档乱码怎么办 小孩做作业磨蹭怎么办 宝宝用左手写字怎么办 小孩动作太慢怎么办 幼儿园不去上学怎么办 嫌弃婆婆带孩子怎么办 孩子写字特别慢怎么办 幼儿园孩子不愿写字怎么办 孩子不愿用力写字怎么办 老公得了懒癌怎么办 太懒不想上班怎么办 写字太多手臂痛怎么办 小孩读书务工证怎么办 一年级孩子撕书怎么办 孩子上幼儿园不适应怎么办 一年级没办学籍怎么办 宝宝不爱做作业怎么办 儿子不爱做作业怎么办 我不想去上学怎么办 孩子写字爱玩怎么办 孩子不爱学习写字怎么办 孩子不爱学习成绩差怎么办 小孩默生字很差怎么办 孩子默写不出来怎么办 孩子不好好写字怎么办 大孩子书写差怎么办 孩子不愿意去学校怎么办 幼儿园不去了怎么办