<?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. 我的Android进阶之旅------>Android APP终极瘦身指南

    首先声明,下面文字转载于: APK瘦身实践 http://www.jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/ APP ...

  2. ORACLE性能优化- Buffer cache 的调整与优化

    Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的 free buffer waits事件. 下面将具 ...

  3. django 中的路由系统(url)

    路由系统 根据Django约定,一个WSGI应用里最核心的部件有两个:路由表和视图.Django框架 的核心功能就是路由:根据HTTP请求中的URL,查找路由表,将HTTP请求分发到 不同的视图去处理 ...

  4. webpack基础使用

    环境: win10, webpack v3.5.6, node v8.4, npm v5.3. 安装与配置 新建一个项目目录demo, 在当前目录执行如下命令: npm init -y npm ins ...

  5. PHP函数的创建

    看代码 PHP函数的创建,包括参数,和其他的语言一样 <?php #PHP crate function function writeName($name) { echo 'Name is '. ...

  6. python 测试代码

    1.使用print()打印 测试代码最简单的就是添加一些print()语句.然而产品开发中,需要记住自己添加的所有print()语句并在最后删除,很容易出现失误. 2.使用pylint.pyflake ...

  7. T25健身视频全集+课表

    http://jianfei.39.net/thread-3639251-1.html T25健身视频全集+课表 强度适中 不伤膝盖! [复制链接]     zytttt         主题 好友 ...

  8. Java集合(7):HashMap

    一.HashMap介绍 HashMap是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算 ...

  9. js验证真实姓名

    var regName = /^[\u4e00-\u9fa5]{2,4}$/; if (!regName.test(examinee.name)) { wx.showToast({ title: &q ...

  10. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...