• __get()获取私有或受保护属性时调用的方法
<?php
class coach
{
private $chairfit = "徐晓冬";
public function __construct()
{
echo "欢迎来到~必图拳馆训练~";
}
public function __get($chairfit)
{
echo $chairfit;//只打印属性名
}
}
class xxd extends coach
{
public function __construct()
{
echo "像个男人一样去战斗!"."\n";
} }
$cj = new xxd();
$cj ->chairfit;
?>
输出结果:

像个男人一样去战斗!               #构造方法调用结果
chairfit                                  #继承自父类的__get()方法


#这样可以访问父类私有属性的值
<?php
class coach
{
private $chairfit = "徐晓冬";
public function __construct()
{
echo "欢迎来到~必图拳馆训练~";
}
public function __get($chairfit)
{
if ($chairfit=='chairfit')
{
return $this->chairfit;
}
}
}
class xxd extends coach
{
public function __construct()
{
echo "像个男人一样去战斗!"."\n";
} }
$cj = new cj();
print($cj ->chairfit);
?>
输出结果:

像个男人一样去战斗!         #构造方法调用结果
徐晓冬        #通过父类的__get()方法访问父类私有属性

 
  • __set()对私有或受保护属性设置值
<?php
class coach
{
protected $chairfit = "徐晓冬";
public function __construct()
{
echo "欢迎来到~必图拳馆训练~";
}
public function __get($chairfit)
{
if ($chairfit=='chairfit')
{
return $this->chairfit;
}
}
}
class cj extends coach
{
public function __construct()
{
echo "欢迎来到北武堂训练"."\n";
}
public function __set($name,$value)
#当然,这__set()方法也可以写到父类中去,这里仅仅是为了展示继承特性中子类可以实现对父类属性,方法的继承
{
echo "hello,我是".$value.",你的巴西柔术教练!";
} }
$cj = new cj();
$cj ->chairfit='劲儿弟弟';
?> 输出结果:

欢迎来到北武堂训练
hello,我是劲儿弟弟,你的巴西柔术教练!

 
  • 拓展:在__set()或者__get()中,如果涉及多个不能直接访问的属性(例如:受保护或私有属性)
<?php
class coach
{
protected $chairfit = "徐晓冬";
private $lover = "丁大锅";
public function __construct()
{
echo "欢迎来到~必图拳馆训练~";
}
public function __get($chairfit)
{
return $this->$chairfit;
#注意;这里$chair是形参,如果写作chairfit,那么无论在实例化对象中访问设置什么属性,只会访问或修改父类中的属性protected $chairfit

} }

class cj extends coach

{

  public function __construct()

  {

    echo "欢迎来到北武堂训练"."\n";

  }

  public function __set($name,$value)

  {

    $this->$name = $value;

#注意;这里$name是形参,如果写作name,那么无论在实例化对象中访问设置什么属性,只会访问或修改父类中的属性protected $chairfit

  }

  public function whoilove($lover)

  {

    echo "我喜欢".$lover;

  }

}

$cj = new cj();

print("掌门人是:".$cj->chairfit."\n");

print("我喜欢:".$cj->lover."\n");

?>

输出结果:

欢迎来到北武堂训练
掌门人是:徐晓冬
我喜欢:丁大锅

根据上面的代码,继续拓展

$cj->whoilove($cj->lover);
$cj->lover='陈培昌'; #调用了__set()方法实现对父类私有属性$lover的设置
$cj->whoilove($cj->lover)

输出结果:

我喜欢丁大锅
我喜欢陈培昌

php类知识点滴---魔术方法,系统在特定时机触发的方法的更多相关文章

  1. php类知识点滴---类的实例化,构造函数,继承初步

    实例化类----黑科技用法,通过字符串来实例化 class coach { public function __construct() { echo "欢迎光临北武堂"." ...

  2. php类知识点滴---类继承的一些原则

    完全重写 <?php class coach { public function __construct() { echo "欢迎来到~北武堂训练~"; } }     cl ...

  3. jQuery绑定以及解除时间方法总结,以及事件触发的方法

     一   off()和on()          $("obj").on(event,[sesect],[data],fn);一般情况下参数只有两个,事件以及事件的处理函数     ...

  4. php类知识---魔术方法__toString,__call,__debugInfo

    <?php class mycoach{ public function __construct($name,$age) { $this->name = $name; $this-> ...

  5. Python 基础之面向对象之类中的方法和与类相关的魔术属性以及反射

    一.类中的方法 普通方法: 没有参数,只能类调用绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)静态方法: 无论是类还是对象,都能调用的方法#例:class Dog() ...

  6. PHP 类中的魔术方法

    定义: PHP类中以两个下画线“__”开头的方法被称为魔术方法. 分类: 例如:构造方法:__construct:析构方法:__destruct:动态重载:__set().__get().__call ...

  7. python类:magic魔术方法

    http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...

  8. Python面向对象5:类的常用魔术方法

    魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹 - 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例 ...

  9. (转)python类:magic魔术方法

    原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...

随机推荐

  1. jdk1.8 -- stream 的使用

    一.stream介绍 stream 是jdk 一个加强的api操作,翻译过来就是流的意思,主要是对Collection 集合的一些操作,流一但生成就会有方向性,类似于自来水管的水流一样,不可以重复使用 ...

  2. 【转帖】docker-get拉取镜像

    docker-get拉取镜像 题目很诱人 找时间测试一下 是否可以翻越长城下载镜像. https://www.cnblogs.com/fuyuteng/p/10904495.html docker-g ...

  3. 基于.NET架构的树形动态报表设计与应用

    在一些统计报表中,利用树形结构报表来实现维度钻取功能是十分常见的.通过逐级钻取,可以快速查看更细粒度的指标数据,如项目施工进度报告等. 使用葡萄城报表控件——ActiveReports ,即可轻松设计 ...

  4. python 下安装pymysql应用

    前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11. ...

  5. Synchronized的实现原理(汇总)

      一.Java中synchronized关键字的作用 总所周知,在并发环境中多个线程对同一个资源进行访问很可能出现脏读等一系列线程安全问题.这时我们可以用加锁的方式对访问共享资源的代码块进行加锁,以 ...

  6. mybatis 基础(一) xml配置

    如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬! mybatis: 1.轻量级 2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库, ...

  7. G.Colorful String(The Preliminary Contest for ICPC Asia Xuzhou 2019)

    https://nanti.jisuanke.com/t/4 #include <bits/stdc++.h> using namespace std; ,; typedef unsign ...

  8. 1-python django的创建

    一.Virtualenv(我的python环境是3.7) 1.虚拟环境创建(针对python版本和django的版本不一致的) 输入 pip install virtuallenv ,看到如下信息就是 ...

  9. Neo4j Cypher语法(二)

    目录 4 子句 4.1 CREATE 4.2 MATCH 4.3 Match 4.4 Create match return连用来返回一个关系基础 4.5 Optional_match 4.6 Wit ...

  10. 使用 ASP.NET Core 的 gRPC 服务

    将 gRPC 服务添加到 ASP.NET Core 应用 gRPC 需要gRPC包. 配置 gRPC 在 Startup.cs 中: gRPC 是通过AddGrpc方法启用的. 每个 gRPC 服务通 ...