php类知识点滴---魔术方法,系统在特定时机触发的方法
- __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类知识点滴---魔术方法,系统在特定时机触发的方法的更多相关文章
- php类知识点滴---类的实例化,构造函数,继承初步
实例化类----黑科技用法,通过字符串来实例化 class coach { public function __construct() { echo "欢迎光临北武堂"." ...
- php类知识点滴---类继承的一些原则
完全重写 <?php class coach { public function __construct() { echo "欢迎来到~北武堂训练~"; } } cl ...
- jQuery绑定以及解除时间方法总结,以及事件触发的方法
一 off()和on() $("obj").on(event,[sesect],[data],fn);一般情况下参数只有两个,事件以及事件的处理函数 ...
- php类知识---魔术方法__toString,__call,__debugInfo
<?php class mycoach{ public function __construct($name,$age) { $this->name = $name; $this-> ...
- Python 基础之面向对象之类中的方法和与类相关的魔术属性以及反射
一.类中的方法 普通方法: 没有参数,只能类调用绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)静态方法: 无论是类还是对象,都能调用的方法#例:class Dog() ...
- PHP 类中的魔术方法
定义: PHP类中以两个下画线“__”开头的方法被称为魔术方法. 分类: 例如:构造方法:__construct:析构方法:__destruct:动态重载:__set().__get().__call ...
- python类:magic魔术方法
http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...
- Python面向对象5:类的常用魔术方法
魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹 - 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例 ...
- (转)python类:magic魔术方法
原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...
随机推荐
- Linux企业面试题(一)
一.如何过滤出已知当前目录dongdaxia中的所有一级目录(提示:不包含dongdaxia目录下面目录的子目录及隐藏目录,即只能是一级目录)? 1. 过滤以“d”开头的 2.查看以/结尾的目录 3. ...
- Stream系列(十)Count方法使用
计数器 视频讲解: https://www.bilibili.com/video/av77905733/ EmployeeTestCase.java package com.example.demo; ...
- OracleLinux6安装
针对Oracle数据库安装的linux系统 1.首先要有oracle linux的镜像 链接:https://pan.baidu.com/s/1S3xYr4YNGtU-351bVaS1-Q 提取码:a ...
- Idea 控制台Tomcat乱码设置
找到tomcat安装目录,进入conf目录,找到logging.properties文件 把默认的 java.util.logging.ConsoleHandler.encoding = UTF-8 ...
- 洛谷 P1266 速度限制 题解
题面 这道题可以理解为是一个分层图,也可以理解为是二维的SPFA dis[i][j]表示到达i这个点速度为j的最短路 然后跑已经死了的SPFA就好了: #include <bits/stdc++ ...
- LeetCode 160——相交链表(JAVA)
编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...
- QObject::connect可以对不继承QObject的类也使用信号槽
#include <QCoreApplication>#include <QDebug>#include <QObject>#include <QThread ...
- 并不对劲的bzoj4231: 回忆树
题目大意 \(n\)个点的树,每条边上有一个小写字母. 操作:给定2个点\(u\),\(v\)(\(u\)可能等于\(v\))和一个非空字符串\(s\),问从\(u\)到\(v\)的简单路径上的所有边 ...
- ipairs与pairs的区别
ipairs 和pairs在lua中都是遍历tbale的函数可是两者有差别 1.pairs遍历table中的全部的key-vale 而ipairs会依据key的数值从1開始加1递增遍历相应的table ...
- LeetCode 腾讯精选50题--数组中的第K个最大元素
好吧,不得不承认,书上看到的始终不是自己的,只有亲身时间过才会明白该怎么操作. 找数组中第K个最大元素,简而言之就是先排序,不论使用哪种算法,都需要先排序,确认位置,由于数组可以通过下标直接访问,所以 ...