php学习九:存取器&魔术方法
当声明属性的时候用到了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学习九:存取器&魔术方法的更多相关文章
- php拦截器(魔术方法)
什么是PHP拦截器? 英文名称 “interceptor”,作用是 拦截 发送未定义的方法和属性的消息. 先看一段代码,定义了一个School类,实例化一个对象$obj,获取一个未定义的属性teach ...
- 【OC学习-8】存取器方法?getter和setter?事实上就是赋值和返回值的两种函数
我们在声明类的时候,有实例变量+方法(函数),这些实例变量假设默认的话都是protected类型,一般无法直接訪问.更别提赋值和调用了,所以就产生了两种函数,getter函数就是可以返回实例变量的值, ...
- 4--OC --合成存取器方法
1. 从OC 2.0开始就已经可以自动生成设置函数方法和获取函数方法(统称为存取器方法). 什么是 @property 和 @synthesize ? @property 和 @synthesize ...
- Python学习笔记1:数据模型和特殊方法(魔术方法)
首先不要脸的放上个人网站:www.comingnext.cn 1.关于数据模型 在Python的官方文档中是这样说的: 对象是Python对数据的抽象.Python程序中所有数据都由对象或对象之间的关 ...
- Pthon魔术方法(Magic Methods)-描述器
Pthon魔术方法(Magic Methods)-描述器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.描述器概述 1>.描述器定义 Python中,一个类实现了&quo ...
- Learn day7 继承(单、多、菱形)\多态\魔术方法\装饰器\异常
1.继承 1.1 单继承# ### 继承 """ (1) 单继承 (2) 多继承 至少2个类,子类和父类 一个类继承另外一个类,当前类是子类 (衍生类) 被继承的这个类是 ...
- 类的两个装饰器classmethod、staticethod和内置魔术方法
一.两个装饰器@classmethod.@staticmethod @classmethod:把类中的绑定方法变成一个类方法,cls 就等于类名 有什么用? 1.在方法中任然可以引用类中的静态变量 2 ...
- Python学习笔记之面向对象编程(三)Python类的魔术方法
python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...
- 【转】九步学习python装饰器
本篇日志来自:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 纯转,只字未改.只是为了学习一下装饰器.其实现在也是没有太看明白 ...
随机推荐
- pdo_mysql安装
如果编译时没有编译pdo模块,可以cd 到php编译时的目录,重新编译 1.切换到pdo_mysql目录,如php-5.5.10/ext/pdo_mysql/ 2.生成configure文件,在pdo ...
- windows server 2008 域控安装
windows server 2008 域控安装:1.dns安装,安装过程会提示.net frame 3.51安装 3.域控安装 原文:地址 http://wenku.baidu.com/link?u ...
- OpenResty(Nginx+Lua)开发入门
Nginx入门 本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章: nginx启动.关闭.重启 http://www.cnblogs.com/derekchen/archi ...
- linux实现防止恶意扫描 PortSentry
linux实现防止恶意扫描 PortSentry 脚本 open 摘要: 端口做为服务器的大门安全很重要,当服务器运行很多服务时并向外提供服务,为防止有人恶意侦测服务器用途,可使用portsent ...
- mysql修改密码与password字段不存在mysqladmin connect to server at localhost failed
mysqladmin: connect to server at 'localhost' failed 停止mysql服务 systemctl stop mysql 安全模式启动 chown -R m ...
- [ Laravel 5.1 文档 ] 服务 —— 任务调度
1.简介 在以前,开发者需要为每一个需要调度的任务编写一个Cron条目,这是很让人头疼的事.你的任务调度不在源码控制中,你必须使用SSH登录到服务器然后添加这些Cron条目.Laravel命令调度器允 ...
- Hash表的表大小
hash表的出现主要是为了对内存中数据的快速.随机的访问.它主要有三个关键点:Hash表的大小.Hash函数.冲突的解决. 这里首先谈谈第一点:Hash表的大小. Hash表的大小一般是定长的,如果太 ...
- OpenMediaVault的OwnCloud扩展不支持NTFS格式硬盘
来源https://forum.openmediavault.org/index.php/Thread/15510-OwnCloud-Operation-not-supported-setfacl/ ...
- 关于Cocos2d-x的专属数据类型
1.Size类定义的实例是一个有width和height属性的类 Size s = Size(44,52); 其中 s.width=44 s.height=52 2.Vec2是一个带有两个变量的(常量 ...
- mysql_query error:Commands out of sync;you can't run this command now
MYSQL_REST *result没有释放, 用mysql_free_result(result)即可.