Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP类设置存储在变量中或从方法返回_Php_Oop_Model - Fatal编程技术网

将PHP类设置存储在变量中或从方法返回

将PHP类设置存储在变量中或从方法返回,php,oop,model,Php,Oop,Model,当人们处理扩展其他类并基于类内的特定设置提供功能的类时,我看到了两种不同的实现 变量用于存储设置 方法用于返回设置 使用变量: class Model { var $fields = array(); function getFields() { return array_keys($this->fields); } function getRules() {

当人们处理扩展其他类并基于类内的特定设置提供功能的类时,我看到了两种不同的实现

  • 变量用于存储设置
  • 方法用于返回设置
使用变量:

    class Model {
        var $fields = array();
        function getFields() {
            return array_keys($this->fields);   
        }
        function getRules() {
            return $this->fields;   
        }
    }
    class Person extends Model {
        var $fields = array(
            'name' => array('maxLength'=>10),
            'email' => array('maxLength'=>50, 'validEmail'=>true),
        );
    }
    class Model {
        function getFields() {}
    }
    class Person extends Model {
        function getFields() {
            return array('name','email');
        }
        function getRules() {
            return array(
                'name' => array('maxLength'=>10),
                'email' => array('maxLength'=>50, 'validEmail'=>true),
            );
        }   
    }
使用方法:

    class Model {
        var $fields = array();
        function getFields() {
            return array_keys($this->fields);   
        }
        function getRules() {
            return $this->fields;   
        }
    }
    class Person extends Model {
        var $fields = array(
            'name' => array('maxLength'=>10),
            'email' => array('maxLength'=>50, 'validEmail'=>true),
        );
    }
    class Model {
        function getFields() {}
    }
    class Person extends Model {
        function getFields() {
            return array('name','email');
        }
        function getRules() {
            return array(
                'name' => array('maxLength'=>10),
                'email' => array('maxLength'=>50, 'validEmail'=>true),
            );
        }   
    }
这两个示例都获得了相同的结果,我可以执行类似于
$person->getFields()
$person->getRules()
的操作,但在方法示例中,我不喜欢“复制”字段列表,因为这些字段实际上是在
$person->getFields()
$person->getRules()中定义的
,每次通过该方法请求时,它都必须计算数组。另一方面,我不喜欢每个对象都将所有设置存储在一个变量中。这似乎是一种资源浪费。所以我只是想知道更好的方法是什么

我的主要问题是:

    class Model {
        var $fields = array();
        function getFields() {
            return array_keys($this->fields);   
        }
        function getRules() {
            return $this->fields;   
        }
    }
    class Person extends Model {
        var $fields = array(
            'name' => array('maxLength'=>10),
            'email' => array('maxLength'=>50, 'validEmail'=>true),
        );
    }
    class Model {
        function getFields() {}
    }
    class Person extends Model {
        function getFields() {
            return array('name','email');
        }
        function getRules() {
            return array(
                'name' => array('maxLength'=>10),
                'email' => array('maxLength'=>50, 'validEmail'=>true),
            );
        }   
    }
  • 是否存在选择一种方式而不是另一种方式的性能原因?(二)
  • 是否有OOP逻辑/编程的简易性/选择一个的其他原因 远远超过另一个

  • 不过,从一些基准测试来看——时间非常相似——这是一个例外

    return array('name','email');
    
    比以前快多了

    return array_keys($this->fields);
    
    对每种方法运行10000次操作会产生以下平均值:

    Variable:
        getFields    0.06s
        getRules     0.05s
    Method:
        getFields    0.04s
        getRules     0.05s
    
    回答第二个问题——这取决于您的用例——这些对象中存储的数据是静态的,还是来自另一个datasource/config文件

    还有一个问题,为什么不使用对象属性

    class Person extends Model {
        protected $name
        protected $email
    
        public function getName() {
            return $this->name;
        }
    
        public function getEmail() {
            return $this->email;
        }
    
    }
    

    我的意见是选择您喜欢的,使用它们都不会带来性能损失或性能提升。您最好为数据处理节省性能

    对于我来说,我使用对象属性,当您查看类时,它看起来很清楚,用于存储这些默认属性,如果您想覆盖它们,那么使用以下漂亮的语法:

    array()+array()
    

    使用属性包含在“使用变量”选项中,其中$this->fields用于将字段名称数组存储为键,将规则数组存储为值。对不起,我的错误,我的意思是使用单个属性
    $person->name
    $person->email