016对象——__set __get get_class_methods get_class_vars
<?php /**
*/
//http://phpbasic.com/004object/16.php?type=admin
/*session_start();
$_SESSION['utype']=isset($_GET['type'])?$_GET['type']:FALSE; class study
{
private $name;
private $age;
public $sex;
function say()
{
echo "我的名字是:" . $this->name . "我的年龄是:" . $this->age;
}
//对类的私有属性赋值时调用我这个魔术函数
function __set($k, $v)
{
if(trim($_SESSION['utype'])=='admin'){
$this->$k = $v;
}else{
die("你没有权限进行操作");
} }
}
$lisi = new study();
$lisi->age = 100;
$lisi->say();*/ // 魔术方法__get() 的使用:当对象访问类的私有属性时,调用此魔术方法
/*session_start();
$_SESSION['utype']=isset($_GET['type'])?$_GET['type']:FALSE;
class study
{
public $name;
private $age;
public $sex;
public $city; function __construct($name, $age, $sex, $city = "")
{
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
$this->city = $city;
} function say()
{
echo "我的名字是:" . $this->name . "我的年龄是:" . $this->age;
} //对类的私有属性赋值时调用我这个魔术函数
function __set($k, $v)
{
if (trim($_SESSION['utype']) == 'admin') {
$this->$k = $v;
} else {
die("你没有权限进行操作");
}
}
function __get($varName)
{
if (trim($_SESSION['utype']) == 'teacher') {
return $this->$varName;
} else {
return "学生年龄保密";
} }
} $wangwu = new study("王五", '33',"男","上海");
echo "<table border=1 cellpadding=0 cellspacing=0>";
echo "<tr><td>名称</td><td>年龄</td><td>性别</td><td>城市</td>";
echo "<tr><td>{$wangwu->name}</td><td>{$wangwu->age}</td><td>{$wangwu->sex}</td><td>{$wangwu->city}</td>";
echo "</table>";*/ /*class teacher{
private $name;
private $age;
private $sex;
private $classType;
private $access;
function __construct($name,$age,$sex,$classType,$access)
{
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
$this->classType=$classType;
$this->access=$access;
$this->access=$this->access($access);
}
private function access($access){
if (!is_array($access)) return FALSE;
$methodArr=get_class_methods(__CLASS__); //获取类中的所有方法。
foreach ($access as $v){
if (!in_array($v,$methodArr)){
die("权限配置错误,类中没有此方法");
}
}
$publicAccess=array('say','eat');
return array_merge($access,$publicAccess);
}
public function chuck(){
$action=isset($_GET['a'])?$_GET['a']:'index';
if (!in_array($action,$this->access)) die("你没有权限操作");
$this->$action();
}
function say(){
echo "姓名:{$this->name},年龄{$this->age},性别:{$this->sex},课程:{$this->classType}";
}
function eat(){
echo "{$this->name}在吃饭";
}
function open(){
echo "{$this->name}开门";
}
function money(){
echo "{$this->name}可以查看我的账户";
}
}
//$libo=new teacher("李波",32,'男','jquery',array('open'));
//$libo->open();
$libo=new teacher("李波",32,'男','jquery',array('open','money'));
$libo->chuck();
//$libo->money();
//print_r(get_class_methods($libo));//获取类的方法名*/ //魔术方法:get_class_vars() 在类外部获取类的公有属性。在内部可以获取所有的属性
class a{
public $a1;
private $a2;
private $a3;
public static function get_vars(){
return get_class_vars(__CLASS__); //获取类的所有属性
}
}
//print_r(a::get_vars());//输出:Array ( [a1] => [a2] => [a3] => )
print_r(get_class_vars('a'));//输出:Array ( [a1] => ) 在外部使用智能获取公有的属性
016对象——__set __get get_class_methods get_class_vars的更多相关文章
- php对象:__autoload()函数及单入口文件,__set(), __get(), get_class_methods(),get_class_vars()
__autoload():当类中找不到相关类的时候,会自动执行__autoload()函数,可以自动加载相关文件 __set() : 当对类的私有变量进行调用赋值时,自动调用该方法. __get() ...
- PHP的魔法方法__set() __get()
php的魔法方法__set()与__get() Tags: PHP 我们先来看看官方的文档如何定义他们的: public void __set(string $name, mixed $value); ...
- __set(),__get() 魔术方法示例
<?php class Ren{private $name;private $age;private $sex;function __set($name,$value){ if($name == ...
- php __set() __get() __isset() __unset()四个方法的应用
一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其 ...
- PHP 魔术方法__set() __get() 方法
a); //output: 123 var_dump($s->b); //output: 123 var_dump($s->c); //output: null var_dump($s-& ...
- __set() __get() _isset() __unset() 在__unset() 在类中没有事先声明和已经声明过的属性调用unset的区别
<?php //echo strtr("I Love Mysql, Love PHP", "Mysql","MYSQL"); //$a ...
- php魔术方法__SET __GET
__SET 设置一个不可访问的属性的时候 调用_set方法 __GET 获取一个不可访问的属性的时候 调用_get 方法 <?php class stu{ private $a; priva ...
- PHP 魔术方法__set() __get() 方法详解
__set() is run when writing data to inaccessible properties. __get() is utilized for reading data fr ...
- php之魔术方法 __set(),__get(),__isset(),__unset()
__set()与__get() 当一个类里面,属性被设置为私有属性时,这个属性是不能在外部被访问的.那么当我们又想在外部访问时该怎么办呢,我们可以用方法来实现.举例如下: 1 class Test 2 ...
随机推荐
- 【我的Android进阶之旅】Android Studio查看Logcat时,如果一行Log太长如何换行显示?
使用Android Studio一段时间了,还有很多小技巧没有掌握.今天又发现了一个比较好用的小技巧,这里分享出来. 1.Android Studio默认显示效果 比如我们用Logcat来查看打印的L ...
- Andrew Ng机器学习编程作业:Support Vector Machines
作业: machine-learning-ex6 1. 支持向量机(Support Vector Machines) 在这节,我们将使用支持向量机来处理二维数据.通过实验将会帮助我们获得一个直观感受S ...
- Hessian矩阵与多元函数极值
Hessian矩阵与多元函数极值 海塞矩阵(Hessian Matrix),又译作海森矩阵,是一个多元函数的二阶偏导数构成的方阵.虽然它是一个具有悠久历史的数学成果.可是在机器学习和图像处理(比如SI ...
- CF 558 C. Amr and Chemistry 暴力+二进制
链接:http://codeforces.com/problemset/problem/558/C C. Amr and Chemistry time limit per test 1 second ...
- 001-前端系列-react系列
一.概述 原文地址:http://www.ruanyifeng.com/blog/2016/09/react-technology-stack.html 二.摘要 ES6 语法:教程 [可以了解] B ...
- Python(装饰器)
eval 内容从字符串中提取出来,用Python运行一遍__name__得到函数名字 闭包函数 定义: 函数内部定义的函数称为内部函数 该内部函数包含对外部作用域,而不是对全局作用域的名字的引用 那么 ...
- Codeforces Round #395 (Div. 2) C. Timofey and a tree
地址:http://codeforces.com/contest/764/problem/C 题目: C. Timofey and a tree time limit per test 2 secon ...
- VMWare 网络连接模式(bridged、NAT、host-only)详解
转自VMWare 网络连接模式(bridged.NAT.host-only)详解 host-only 在某些特殊的网络调试环境中,如何要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模 ...
- java实验一报告
北京电子科技学院(BESTI) 实 验 报 告 课程:Java 班级: 1352 姓名:黄晓妍 学号:20135227 成绩: 指导教师:娄嘉 ...
- 20145219 《Java程序设计》第02周学习总结
20145219 <Java程序设计>第02周学习总结 教材学习内容总结 类型:基本类型.类类型(参考类型) 基本类型: 整数:short占2字节,int占4字节,long占8字节 字节: ...