当声明属性的时候用到了private,那么的话只能本类中才能访问此属性,其他地方无法使用,这个时候需要给外界提供一些方法来使外界访问

方法一:存取器:

可以提供一个public的方法来使外界对类里面的属性进行访问和赋值

class Student
{
private $name;
private $age;
public function show(){
echo "{$this->name}今年{$this->age}岁了";
}
/*****存取器:get,set******/
/****提供set方法给外界赋值***/
public function setName($name){
$this->name=$name;
}
public function setAge($age){
if($age<0){
$this->age = "18";
}else{
$this->age=$age;
}
} /******提供get方法给外界取值**********/
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
}

 实例化的代码:

$stu = new Student();
/*****不能直接访问,需要用类里面的set,get方法来访问******/
$stu->setName("房明");
echo $stu->getName(); $stu->setAge(-18);
echo $stu->getAge(); $stu->show();

  

方法二:魔术方法进行访问

在php中文诶我们提供了许多的魔术方法,在这里我们只要是某某一个魔术方法就可以完成我们想要的效果

*__set():赋值
* __get():取值
* __isset():是否有这个属性
* __unset():销毁某个属性 代码如下:
class User
{
private $name;
private $age; /*****__set():赋值****/
function __set($name,$value)
{
if($name == "age"){
if($value <18){
$this->age = 18;
}else{
$this->age = $value;
}
}else{
$this->$name = $value;
}
} /****__get():取值***/
function __get($name)
{
if($name == "name"){
return "dog";
}else{
return $this->$name;
}
} /***** __isset():是否有这个属性****/
//当当前属性被isset()或者empty(),即当某个属性被检验空的方法调用的时候,会触发这个方法
function __isset($name)
{
echo "{$name}isset被调用了";
} /*******__unset():销毁某个属性******/
//
function __unset($name)
{
echo "{$name}被销毁了"; //防止被销毁的时候直接写一个return即可;
} public function show(){
echo "{$this->name}今年{$this->age}岁了";
}
}

  魔术方法进行访问:

$user = new User();
$user->name = "房明";
$user->age = 10;
echo $user->name; echo $user->age; $user->show(); isset($user->name); unset($user->name);

  

php学习九:存取器&魔术方法的更多相关文章

  1. php拦截器(魔术方法)

    什么是PHP拦截器? 英文名称 “interceptor”,作用是 拦截 发送未定义的方法和属性的消息. 先看一段代码,定义了一个School类,实例化一个对象$obj,获取一个未定义的属性teach ...

  2. 【OC学习-8】存取器方法?getter和setter?事实上就是赋值和返回值的两种函数

    我们在声明类的时候,有实例变量+方法(函数),这些实例变量假设默认的话都是protected类型,一般无法直接訪问.更别提赋值和调用了,所以就产生了两种函数,getter函数就是可以返回实例变量的值, ...

  3. 4--OC --合成存取器方法

    1. 从OC 2.0开始就已经可以自动生成设置函数方法和获取函数方法(统称为存取器方法). 什么是 @property 和 @synthesize ? @property 和 @synthesize ...

  4. Python学习笔记1:数据模型和特殊方法(魔术方法)

    首先不要脸的放上个人网站:www.comingnext.cn 1.关于数据模型 在Python的官方文档中是这样说的: 对象是Python对数据的抽象.Python程序中所有数据都由对象或对象之间的关 ...

  5. Pthon魔术方法(Magic Methods)-描述器

    Pthon魔术方法(Magic Methods)-描述器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.描述器概述 1>.描述器定义 Python中,一个类实现了&quo ...

  6. Learn day7 继承(单、多、菱形)\多态\魔术方法\装饰器\异常

    1.继承 1.1 单继承# ### 继承 """ (1) 单继承 (2) 多继承 至少2个类,子类和父类 一个类继承另外一个类,当前类是子类 (衍生类) 被继承的这个类是 ...

  7. 类的两个装饰器classmethod、staticethod和内置魔术方法

    一.两个装饰器@classmethod.@staticmethod @classmethod:把类中的绑定方法变成一个类方法,cls 就等于类名 有什么用? 1.在方法中任然可以引用类中的静态变量 2 ...

  8. Python学习笔记之面向对象编程(三)Python类的魔术方法

    python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...

  9. 【转】九步学习python装饰器

    本篇日志来自:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 纯转,只字未改.只是为了学习一下装饰器.其实现在也是没有太看明白 ...

随机推荐

  1. docker探索-Win10 Docker 安装使用(一)

    本文转自:http://blog.csdn.net/shi1451042748/article/details/52996046 1.前言 Docker最近推出了可以运行在Win10稳定版本,让我们赶 ...

  2. sql数据类型总结

    一.数字数据类型 bigint int smallint tinyint decimal numeric money smallmoney float real Bit 二.字符数据类型 非unico ...

  3. rp2833 网卡以及串口与接插件位置关系

    P13     eth0  (电口--兼容光口,如果使用光口,请将去掉U31以及P13) p12     eth1 P9     /dev/ttyS3 调试口 P10-1  /dev/ttyS2  r ...

  4. Android——ArrayList 、LinkList、List 区别 & 迭代器iterator的使用 & HashMap、Hashtable、LinkedHashMap、TreeMap

     ArrayList .LinkList.List 区别 & 迭代器iterator的使用 & HashMap.Hashtable.LinkedHashMap.TreeMap 一.几个 ...

  5. MySQL下查询锁信息

    SHOW PROCESSLIST;SHOW OPEN TABLES WHERE In_use > 0; #运行线程 SHOW  GLOBAL  STATUS LIKE 'Threads_runn ...

  6. Phalcon的MVC框架解析

    1. mvc/simple从最简单的入手吧. 把一些能及时说明白的东西写在注释里了,需要扩展的知识列在下面. public/index.php <?php $loader = new \Phal ...

  7. ORACLE11G 字符集更改(这里更改为AL32UTF8)

    ORACLE11G 字符集更改(这里更改为AL32UTF8)更改步骤:1.用sysdba角色用户登录sqlplus: 命令行输入:sqlplus sys as sysdba 2.输入口令,进入sqlp ...

  8. Axel 快速下载

    Axel 是一个轻量级下载程序,它和其他加速器一样,对同一个文件建立多个连接,每个连接下载单独的文件片段以更快地完成下载. Axel 支持 HTTP.HTTPS.FTP 和 FTPS 协议.它也可以使 ...

  9. 2016年第七届蓝桥杯C/C++程序设计本科B组省赛

    /* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...

  10. 在网页中使用SVG

    SVG可以作为一个独立的文件存在.但更多的时候,我们希望他能集成在某个更大的文档中,比如HTML.将SVG插入到HTML中主要有以下几种方式: 将 SVG 作为图像导入 将 SVG放入 iframe ...