2019独角兽企业重金招聘Python工程师标准>>>

一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。

上一节中,我们为每个属性做了设置和获取的方法,在PHP5中给我们提供了专门为属性设置值和获取值的方法,“__set()”和“__get()”这两个方法,这两个方法不是默认存在的,而是我们手工添加到类里面去的,像构造方法(__construct())一样, 类里面添加了才会存在,可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加:

//__get()方法用来获取私有属性

private function __get($property_name)

{

if(isset($this->$property_name))

{

return($this->$property_name);

}else

{

return(NULL);

}

}

//__set()方法用来设置私有属性

private function __set($property_name, $value)

{

$this->$property_name = $value;

}

__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法,是在直接获取私有属性的时候对象自动调用的。因为私有属性已经被封装上了,是不能直接获取值的(比如:“echo $p1->name”这样直接获取是错误的),但是如果你在类里面加上了这个方法,在使用“echo $p1->name”这样的语句直接获取值的时候就会自动调用__get($property_name)方法,将属性name传给参数$property_name,通过这个方法的内部执行,返回我们传入的私有属性的值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。

__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上

了,如果没有__set()这个方法,是不允许的,比如:$this->name=‘zhangsan’, 这样会出错,但是如果你在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,把属性比如name传给$property_name, 把要赋的值“zhangsan”传给$value,通过这个方法的执行,达到赋值的目的。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值,还可以在这个方法给做一下判断。代码如下:

<?php

class Person

{

//下面是人的成员属性, 都是封装的私有成员

private $name;        //人的名子

private $sex;         //人的性别

private $age;         //人的年龄

//__get()方法用来获取私有属性

private function __get($property_name)

{

echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";

if(isset($this->$property_name))

{

return($this->$property_name);

}

else

{

return(NULL);

}

}

//__set()方法用来设置私有属性

private function __set($property_name, $value)

{

echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";

$this->$property_name = $value;

}

}

$p1=new Person();

//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值

$p1->name="张三";

$p1->sex="男";

$p1->age=20;

//直接获取私有属性的值, 会自动调用__get()方法,返回成员属性的值

echo "姓名:".$p1->name."<br>";

echo "性别:".$p1->sex."<br>";

echo "年龄:".$p1->age."<br>";

?>

程序执行结果:

在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个__get()方法
姓名:张三
在直接获取私有属性值的时候,自动调用了这个__get()方法
性别:男
在直接获取私有属性值的时候,自动调用了这个__get()方法
年龄:20

以上代码如果不加上__get()和__set()方法,程序就会出错,因为不能在类的外部操作私有成员,而上面的代码是通过自动调用__get()和__set()方法来帮助我们直接存取封装的私有成员的。

转载于:https://my.oschina.net/u/1186749/blog/685406

php基本功之_get(),_set()的用法相关推荐

  1. set的用法及短语_set的用法总结大全

    set的意思 vt. 放置,安置,使处于某种状况,设置,摆放餐具 vi. 落山,出发,凝结 n. 一套,一副,集合,布景,电视机 adj. 固定的,位于-的,顽固的,安排好的 变形:过去式: set: ...

  2. PHP中__get()和__set()的用法实例详

    刚刚看到一个对我有用的文章,我就把它摘抄下来了.                                                                        php面 ...

  3. php 面对对象总结,PHP 面向对象总结

    类 类的声明: 权限修饰符 class 类名{   //权限修士符号:public,protected,private 或者省略3者. //类体; //class 是建类关键字 } //类名必须跟在c ...

  4. 网易云课堂Web安全工程师课程分享——第二章 Web开发基础知识

    第一节 前端开发基础--HTML 课程回顾 Web页面通常使用哪几种语言开发? HTML结构包含哪两部分? HTML元素由哪几部分组成? 常见的HTML标签有哪些? HTML DOM是什么结构? 总结 ...

  5. php代码审计备忘录

    php代码审计实施要点 代码\审计工具 工具 介绍 seay源代码审计系统 免费的,支持5.4一下版本代码审计,不要太依赖自动审计,能发现太少 Fortify SCA 商业化工具,需要破解,需要规则库 ...

  6. vue 3.0 Refs详解

    目录 ref unref toRef toRef和ref的区别 toRefs isRef customRef shallowRef和triggerRef ref 接受一个内部值并返回一个响应式且可变的 ...

  7. Django笔记六之外键ForeignKey介绍

    这一篇笔记介绍 Django 系统 model 的外键处理,ForeignKey 以及相应的处理方法. 这是一种一对多的字段类型,表示两张表之间的关联关系. 本篇笔记的目录如下: on_delete ...

  8. php函数get和set,php中外部类调用_get函数和_set函数的方法

    本篇文章给大家分享的内容是关于php中外部类调用_get函数和_set函数的方法,有详细的代码,希望可以帮助到有需要的朋友. 外部调用类的私有属性 先来了解一下PHP类中的__get和__set函数 ...

  9. 零敲碎打基本功-分清的地得的用法

    最近看一些文章,最突出的问题就是"的地得"混用,或者一屡用"的".说起来这是个基本功,但真正用规范的不多,找了个标准答案,供大家时习之,审视之. 不少同学对&q ...

最新文章

  1. Linux下常用的C/C++开源Socket库
  2. android 代码中使用dp,简单谈谈Android中SP与DP的区别
  3. 下一代AirPods可能就可以监测你的健康状况了
  4. http error 502.5
  5. HTML快速上手教程
  6. fiddler弱网测试_用fiddler实现弱网测试
  7. archLinux 安装拼音输入法
  8. python 下载安装
  9. 分享100个精美模板PPT模板,总有一款适合你
  10. 批处理跑Axapta多个主计划
  11. HR面试都会问什么问题?(上)
  12. c语言狐狸捉兔子问题
  13. 校园APP开发的优势和特点
  14. git ssh-keygen
  15. 计算机断电后自动启动,断电来电后自动开机,神奇的电脑开机方法
  16. idea修改git账号密码
  17. 2021-09-29 计算BMI值(国际上常用的衡量人体胖瘦程度的一个标准)(要保留多少位有效数字可以用python内置的 round 函数)
  18. 自媒体人想要写好实时热点文章,一定要掌握好这三点
  19. 清明假期搞了个“精灵球“
  20. mtk+android+之mt6577驱动笔记,MTK6577+Android之音频(audio)移植

热门文章

  1. vba quit此文件正由另一个应用程序或用户使用_VBA|如何添加外部对象库(或控件)引用来扩展VBA功能...
  2. matplotlib 中文_详解Matplotlib中文字符显示问题
  3. mysql默认数据库名称,默认的MySQL数据库名称
  4. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇
  5. 加拿大大学计算机排名2015,加拿大大学计算机排名
  6. 把一个人的特点写具体作文_部编版五年级下册语文 第五单元:习作 | 把一个人的特点写具体 电子课本+教案课件...
  7. python3 多线程_python3--多线程的使用
  8. 坐地铁可以刷学生卡吗_在沈阳办的公交卡能刷地铁吗?是学生卡,卡上写的是盛京通...
  9. 在java中私有方法能被重载吗_我可以在Java中重载私有方法吗?
  10. 研华电脑510上电自启_研华工控机怎么设置u盘启动_研华工控机U盘引导方法