__get() 获取私有属性
__set() 设置私有属性class aabb{
private $name;
private $age
}实例化后 如何分别设置这2个私有属性呢?

解决方案 »

  1.   


    class aabb{ 
    private $name; 
    private $age 
    private function __set($name,$value)
    {
    $this->name = $value;
    }

    $obj = new aabb();
    $obj->name = 'adsfa';实例化后 如何分别设置这2个私有属性呢? 
    直接赋值,当成公有属性就行了
      

  2.   

    private function __set($name,$value)
    这里的$name 是否就是 private $name???
    如何在给private $age付值?
    __get() 有什么用?
    谢谢 
      

  3.   

    个人觉得这样使用的话还不如不用private 
    从程序结构理解上不够清晰,让人觉得很费解。至少我个人认为这不是个多么好的功能
    class aabb{ 
    private $name; 
    private $age 
    private function __set($name,$value)
    {
     // 处理$name,$value后操作private 变量
    $this->name = $value;
    }

    $obj = new aabb();
    $obj->name = 'adsfa';
    既然 $obj->name 可以通过 __set 调用,完全可以自己写个 public 方法来处理 $name
    可是如果有__set 的话,会导致其他的private 成员也会被公开个人感觉还是不要使用__set __get  ,对象的私有方法应该专用处理
      

  4.   


    ($name,$value)  对应的是 $obj->xxxx = 'bbbb';
    $name  ->  xxxx
    $value ->  bbbb
      

  5.   

    直接赋值,当成公有属性就行了如果我要分别 给2个私有属性赋值 但是private function __set($name,$value)
    {
    $this->name = $value;
    }这个里的规则是不一样的怎么办
      

  6.   

    private function __set($name,$value) 

    $this->$name = $value; 

      

  7.   


    __set __get主要功能是,用当到权限分配时, 在里面可以加判断来是否操作私有变量, 如果单凭在函数里赋值和取值, 纯属多此一举, 这个也是很多新手入门的弊端
      

  8.   

    还是不懂
    __get() __set() 
      

  9.   

    TO 8#  其实从对象的封装上来说,如果__set  __get 仅仅针对部分private 的话,和普通的public 方法应该没什么两样了。  如果从__set 或者 __get 方面来说,个人感觉这还是破坏了对象的封装性。个人还是不太推荐使用这两方法
      

  10.   

    __get() __set() 是php类内置的两个方法,其他还有__CALL __sleep __wakeup 等等
    这些方法都执行预定的功能,比如
    $obj->name = 'my';
    实际就是执行 $obj->__set('name', 'my');

    echo $obj->name;
    实际就是执行
    echo $obj->__get('name');这些内置方法同时也提供给php程序员,通过重载这些方法,可以使php程序员得以改变php对象的行为
      

  11.   

    恩。我特地又翻了下手册看了看这方面手册中演示的是针对private Array 的数据操作,如祖宁所说,在部分Object 内改变操作方法例如
    <?php
    class Demo()
    {
     private $user;
     function __construct()
     {
       $this->user = array();
     } function __set($key,$value)
     {
       $this->user[$key] = $value;
     } function __get($key)
     {
       if(isset($this->user[$key]))
      {
        return $this->user[$key];
      }
      else
      {
        return "NULL";
       }
     }
    }$DemoObj = new Demo();
    $DemoObj->a = "40";  // in Object private user['a'] = 40;
    $DemoObj->b = "50";  // in Object private user['b'] = 50;
    echo $DemoObj->a;?>从上面我们看呢,代码是挺方便。挺简洁的..其实我们换个角度来想想,在实际构造这个Object的时候,我们已经很明确的定义 user为private 
    意思就是这个user不能被其他对象所调用。虽然$Demo->a 形式上看起来是外部直接调用,但在其
    实现机制上却是通过 __get来实现  。从代码层次,我们是被迷惑了
    为什么不是 $Demo->GetUser($a); 呢?这样看起来其实更好些现在也不知道PHP的实现是怎么实现的,是不是我们所声明的CLASS都默认继承了PHP的一个内置obj?
    不论是让我们继承一个还是PHP内置了实现方法,我个人对这种操作还不是太习惯,也不支持
      

  12.   

    不知道这样写你能否明白set和get两个老师的作用
    class 开放式幼儿园{
    public $幼儿园里的儿子;
    }
    $送儿子去幼儿园 = new 开放式幼儿园;
    $送儿子去幼儿园->幼儿园里的儿子 = '小班';
    $放学接儿子去 = $送儿子去幼儿园->幼儿园里的儿子;//直接可以到 开放式幼儿园 的 小班 里接
    class 封闭式幼儿园{
    private $幼儿园里的儿子;
    public function __set($小朋友,$班级){
    $this->$小朋友 = $班级;//家长不能进幼儿园,只能把儿子送到幼儿园门口请set老师带进去
    }
    public function __get($小朋友){
    return $this->$小朋友;//家长不能进幼儿园,儿子又不在门口,只能喊个名字让get老师送出来
    }
    }
    $送儿子去幼儿园 = new 封闭式幼儿园;
    $送儿子去幼儿园->幼儿园里的儿子 = '小班';//这里要请__set()老师帮忙了
    $放学接儿子去 = $送儿子去幼儿园->幼儿园里的儿子;//这里要请__get()老师帮忙了
      

  13.   

    如果想知道 __get 和 __set 的魔力,请看
    elgg1.5 的数据层设计.
      

  14.   

    class pc{ private $name;
    private $age;

    function prints(){
    echo $this->name;
    echo $this->age;

    function __set($name,$var){

    $this->age=$var;
    $this->name=$var;
    }

    }$pc1=new pc();
    $pc1->name="孩子";
    $pc1->age="50";
    $pc1->prints();这个的意思应该写??
    分别对2个私有属性赋值 然后 执行方法
      

  15.   


    class pc{
      ..
      ..
      public function __get($name,$value){
         $this->$name = $value;
      }
    }