代码之家  ›  专栏  ›  技术社区  ›  Agi Hammerthief

如何在PHP中将get和set方法/函数指定为类属性的一部分?

  •  0
  • Agi Hammerthief  · 技术社区  · 10 年前

    使用PHP,如何将getter和setter方法/函数定义/声明为类中属性声明的一部分?

    我试图做的是将getter和setter方法指定为属性的一部分,而不是声明单独的 set_propertyName($value) get_propertyName() 函数/方法。

    我得到的:

    class my_entity {
        protected $is_new;
        protected $eid; // entity ID for an existing entity
        public function __construct($is_new = FALSE, $eid = 0) {
            $this->is_new = $is_new;
            if ($eid > 0) {
                $this->set_eid($eid);
            }
        }
    
        // setter method
        public function set_eid($eid) {
            $is_set = FALSE;
            if (is_numeric($eid)) {
                $this->eid = intval($eid);
                $is_set = TRUE;
            }
            return $is_set;
        }
    }
    

    我想要的(不需要将$this->eid作为对象):

    class my_entity {
        protected $is_new;
        // entity ID for an existing entity
        protected $eid {
          set: function($value) {
            $is_set = FALSE;
            if (is_numeric($value)) {
                $this->eid = intval($value);
                $is_set = TRUE;
            }
            return $is_set;
    
          }, // end setter
    
        }; 
        public function __construct($is_new = FALSE, $eid = 0) {
            $this->is_new = $is_new;
            if ($eid > 0) {
                $this->set_eid($eid);
            }
        }
    
        // setter method/function removed
    }
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   Drahcir    10 年前

    PHP只允许每个类有一个getter和一个setter函数,它们是 __get & __set 神奇的方法。这两个神奇的方法必须处理所有私有/无法访问的财产的get和set请求。 http://www.php.net/manual/en/language.oop5.magic.php

    private function set_eid($id)
    {
        //set it...
        $this->eid = $id;
    }
    
    private function get_eid($id)
    {
        //return it...
        return $this->eid;
    }
    
    public function __set($name, $value)
    {
        switch($name)
        {
            case 'eid':
                $this->set_eid($value);
            break;
        }
    }
    
    public function __get($name)
    {
        switch($name)
        {
            case 'eid':
                return $this->get_eid();
            break;
        }
    }
    

    在2个switch语句中,您还可以添加其他财产的名称。

    记住这一点很重要 __获取 __集合 仅当变量不可访问时调用,这意味着从类内部获取或设置时,仍必须手动调用 set__eid .

        2
  •  0
  •   Mark Baker    10 年前

    这是 proposed 对于PHP 5.5,但是 vote 未能获得所需的2/3多数,从而无法将其纳入核心,因此无法实现(尽管已经提交了实现该更改的代码)。

    它完全有可能在未来重新提交(由于目前出现了大量新的PHP引擎和Hackang),特别是如果Hackang决定实现它;但目前PHP中没有使用C#getters/setters的选项