<?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高级教程-filter

    Python中的filter() Python内建的filter()函数用于过滤序列.和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次 ...

  2. JavaScript-4.2函数,变量作用域---ShinePans

    <html> <head> <meta http-equiv="content-type" content="text/html;chars ...

  3. Oracle Shared Pool 原理

    Oracle Shared Pool 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch, ...

  4. 转:.Net 中的反射(反射特性) - Part.3

    .Net 中的反射(反射特性) - Part.3 反射特性(Attribute) 可能很多人还不了解特性,所以我们先了解一下什么是特性.想想看如果有一个消息系统,它存在这样一个方法,用来将一则短消息发 ...

  5. cf100989b

    http://codeforces.com/gym/100989/my B. LCS (B) time limit per test 0.25 seconds memory limit per tes ...

  6. 字符数组(char)和字符串(string)的转换

    #include<iostream>#include<string>using namespace std;void main(){ string LyuS = "W ...

  7. 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?

    import random import string def GenKey(length): chars = string.ascii_letters + string.digits return ...

  8. 20145201《Java程序设计》第五次实验报告

    实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 我负责客户端 组队队员:鄢曼君20145227负责服务器 博客地址:htt ...

  9. shell脚本实现进度条

    使用shell脚本编写进度条 可已加入到shell脚本当中 主要作用:好看 美观 没毛用 (一) 普通进度条: #!/bin/bashb='' for ((i=0;$i<=20;i++)) do ...

  10. 深入理解JVM 垃圾收集器(下)G1收集器

    1.回顾CMS 1.1堆内存结构 1.2新生代GC 1.3老年代GC 2.G1收集器 2.1G1实现概览及使用场景 G1的推荐使用场景 2.2GC 2.2.1新生代GC 2.2.2老年代GC 老年代G ...