<?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的更多相关文章

  1. php对象:__autoload()函数及单入口文件,__set(), __get(), get_class_methods(),get_class_vars()

    __autoload():当类中找不到相关类的时候,会自动执行__autoload()函数,可以自动加载相关文件 __set() : 当对类的私有变量进行调用赋值时,自动调用该方法.  __get() ...

  2. PHP的魔法方法__set() __get()

    php的魔法方法__set()与__get() Tags: PHP 我们先来看看官方的文档如何定义他们的: public void __set(string $name, mixed $value); ...

  3. __set(),__get() 魔术方法示例

    <?php class Ren{private $name;private $age;private $sex;function __set($name,$value){ if($name == ...

  4. php __set() __get() __isset() __unset()四个方法的应用

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取 和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获 取和赋值其 ...

  5. PHP 魔术方法__set() __get() 方法

    a); //output: 123 var_dump($s->b); //output: 123 var_dump($s->c); //output: null var_dump($s-& ...

  6. __set() __get() _isset() __unset() 在__unset() 在类中没有事先声明和已经声明过的属性调用unset的区别

    <?php //echo strtr("I Love Mysql, Love PHP", "Mysql","MYSQL"); //$a ...

  7. php魔术方法__SET __GET

    __SET  设置一个不可访问的属性的时候 调用_set方法 __GET 获取一个不可访问的属性的时候  调用_get 方法 <?php class stu{ private $a; priva ...

  8. PHP 魔术方法__set() __get() 方法详解

    __set() is run when writing data to inaccessible properties. __get() is utilized for reading data fr ...

  9. php之魔术方法 __set(),__get(),__isset(),__unset()

    __set()与__get() 当一个类里面,属性被设置为私有属性时,这个属性是不能在外部被访问的.那么当我们又想在外部访问时该怎么办呢,我们可以用方法来实现.举例如下: 1 class Test 2 ...

随机推荐

  1. Python高级教程-列表生成式

    List Comprehensions(列表生成式) 列表生成式,是Python内置的非常简单却强大的可以用来创建list的生成式. 例如,要生成list:[1,2,3,4,5,6,7,8,9,10] ...

  2. (转)基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  3. 005-Symbol、Proxy、Reflect

    1.Symbol:http://es6.ruanyifeng.com/#docs/symbol 2.Proxy:http://es6.ruanyifeng.com/#docs/proxy Proxy ...

  4. Python(常用模块)

    模块 模块 本质上就是一个.py文件 内置模块(解释器层面) 第三方模块(Python lib文件) 自定义模块(当前路径) 模块调用,包的概念 在计算机程序的开发过程中,随着程序代码越写越多,在一个 ...

  5. Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配

    Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   ...

  6. jmeter常用插件安装

    转载:http://www.cnblogs.com/danqiu/p/6119156.html 下载地址:http://jmeter-plugins.org/downloads/all/ PerfMo ...

  7. jdbc封装代码

    jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  8. 查找java程序进程快速指令jps

    通过jdk1.5以后内置的一个指令,可以快速查找java进程pid,该命令是:jps 位置在:JAVA_HOME/bin/目录下面 功能 jps(Java Virtual Machine Proces ...

  9. Shell awk 求标准差

    cat > temp000180255798957892187719 awk '{x[NR]=$0; s+=$0; n++} END{a=s/n; for (i in x){ss += (x[i ...

  10. JS复制内容到剪贴板: 兼容IE、Firefox、Chrome、Safari所有浏览器【转】

    正 文: 现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个 ...