当声明属性的时候用到了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. 【Unity笔记】使用协程(Coroutine)异步加载场景

    using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; using System; public ...

  2. C语言 · 友好数

    算法训练 友好数   时间限制:1.0s   内存限制:256.0MB      问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:1 ...

  3. SpringMVC HandlerMethodArgumentResolver自定义参数转换器 针对HashMap失效的问题

    自定义Spring MVC3的参数映射和返回值映射 + fastjson 自定义Spring MVC3的参数映射和返回值映射 + fastjson首先说一下场景:在一些富客户端Web应用程序中我们会有 ...

  4. BusyBox inittab

    # /etc/inittab init(8) configuration for BusyBox## Copyright (C) 1999-2004 by Erik Andersen <ande ...

  5. mysql 修改用户权限,允许远程连接数据库

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION; flush privileg ...

  6. 传说中的纯CSS圆角代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. Maven学习日记(二)---MAVEN创建多模块的项目

    手动构建多模块maven项目,这个simple-parent项目下有两个子模块,一个是jar包型的simple-weather和一个war型的simple-webapp1.创建一个父的simple-p ...

  8. 散货:null 强转 和 iOS null崩溃

    问题1 在看  SpringMVC源码剖析(五)-消息转换器HttpMessageConverter  的时候,在 org.springframework.web.servlet.mvc.method ...

  9. Ubuntu 12.04 root用户登录设置

    Ubuntu 12.04默认是不允许root登录的,在登录窗口只能看到普通用户和访客登录.以普通身份登陆Ubuntu后我们需要做一些修改,普通用户登录后,修改系统配置文件需要切换到超级用户模式,在终端 ...

  10. eclipse下载,安装,JDk环境配置教程(多图)

    第一步:下载eclipse,并安装. 下载链接:http://www.eclipse.org/downloads/ 点击 Download Packages; 根据自己的系统选择32位还是64位的,点 ...