PHP5中__get()、__set()方法
标题是:PHP5中__get()、__set()方法,不错,在PHP5以下(PHP4)是没有这两个方法的。
__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。
__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。(key=>value)
/*
*person.class.php
*/
<?php class Person{ private $name;
public $age;
public $sex;
public $addrs;
public $time; function __construct($name,$age,$sex,$addrs){
//parent::__construct();
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
$this->addrs = $addrs;
} private function __get($pri_name){
if(isset($this->$pri_name)){
echo "pri_name:".$this->$pri_name."<br>";
return $this->$pri_name;
}else{
echo "不存在".$pri_name;
return null;
}
} private function __set($pri_name,$value){
echo $pri_name."的值为:".$value."<br>";
$this->$pri_name = $value;
} function user($time){
$this->time = $time;
echo "我叫:".$this->name.",今年:".$this->age."岁,性别:".$this->sex.",地址是:".$this->addrs.",--".$this->time."<br>";
} function __destruct(){
echo "再见:".$this->name."<br>";
} } ?>
/*
*person.php
*/
<?php
require "person.class.php"; $Person = new Person("xy404","22","男","湖北");
$Person->user(404); $Person->name = "aib"; //在person.class.php中的person类中name这个属性private的。所以它在赋值的时候自动调用了__set()这个方法.如果没有__set()方法就会报错。 echo $Person->name."<br>";
?>
输出的内容:
- 在直接获取私有属性值的时候,自动调用了这个__get()方法。
- 在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
一般在调用类的属性和方法的时候会使用:$this->name 或 $this->name()来完成。下面通过一个简单的例子来说明一下$this->$name的这种用法。
<?php
class Test{
public $name = "abc";
public $abc = "test"; public function Test(){
$name1 = "name";
echo $this->name; // 输出 abc
echo $this->$name1; // 输出 abc,因为 $name1 的值是name,相当与这里替换成 echo $this->name;
$name2 = $this->$name1; // $name2 的值是 abc
echo $this->$name2; // 输出 test,同上,相当与是 echo $this->abc;
}
}
?>
PHP5中__get()、__set()方法的更多相关文章
- 巧用PHP中__get()魔术方法
PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...
- PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $ ...
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- PHP5中__call、__get、__set、__clone、__sleep、__wakeup的用法
__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__w ...
- PHP中的__get()和__set()方法获取设置私有属性
在类的封装中,获取属性可以自定义getXXX()和setXXX()方法,当一个类中有多个属性时,使用这种方式就会很麻烦.为此PHP5中预定义了__get()和__set()方法,其中__get()方法 ...
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- PHP中的魔术方法总结:__construct,__destruct ,__call,__callStatic,__get,__set,__isset, __unset ,__sleep,__wakeup,__toString,__set_state,__clone,__autoload
1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $property, $value ...
- php中__get()和__set的用法
php版本5.6 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来 ...
- PHP中__get()和__set()的用法实例详
刚刚看到一个对我有用的文章,我就把它摘抄下来了. php面 ...
随机推荐
- Docker最全教程——从理论到实战(十)
终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...
- Java TreeSet集合 比较器排序Comparator的使用
比较器排序Comparator的使用 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 用TreeSet集合存 ...
- EF CodeFirst简介、默认约定、数据库初始化策略
CodeFirst 工作流程 创建或修改领域类-->使用数据注解或者Fluent API来配置领域类-->使用自动数据库迁移技术或者基于代码的数据库迁移技术来创建数据库. CodeFirs ...
- C语言注释符号
同学们认为注释很简单,那我来看看下面的代码是否正确? 1.似是而非的问题 int main() { int/*...*/i; char* s = "abcdefgh //hijklmn&qu ...
- Oracle查询当前用户和当前用户下的所有表
转载自:http://blog.itpub.net/29485627/viewspace-1246317/ Oracle查询当前用户和当前用户下的所有表 (1)查询当前用户 SQL> show ...
- python3练习100题——017
原题链接:http://www.runoob.com/python/python-exercise-example17.html 题目:输入一行字符,分别统计出其中 英文字母.空格.数字和其它字符的个 ...
- 实用 SQL 语句
1. 创建 1.1 创建数据库 语法:create database db_name 示例:创建应用数据库 awesome_app sqlcreate database `awesome_app` 复 ...
- codeforces 1284C. New Year and Permutation(组合数学)
链接:https://codeforces.com/problemset/problem/1284/C 题意:定义一个framed segment,在区间[l,r]中,max值-min值 = r - ...
- Redis09——事务(悲观锁、乐观锁)
事务 定义: Redis事务是一个单独的隔离操作 ①事务中所有的命令都会被序列化.按照顺序执行 ②事务在执行过程中不会被其他客户端发送来的命令请求打断 作用: 串联多个命令防止别的命令插队 multi ...
- jmeter+ant+jenkins接口自动化测试框架
大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件:Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具.将这三者结合起来可以搭建 ...