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

标签 php oop model

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

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

使用变量:

    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() 中定义的并且它必须在每次通过该方法请求时计算数组。另一方面,我不喜欢每个对象都将所有设置存储在一个变量中。这似乎是一种资源浪费。所以我只是想知道什么是更好的方法。

我的主要问题是:

  1. 是否有选择一种方式而不是另一种方式的性能原因? 2)
  2. 是否有 OOP 逻辑/易于编程/其他原因可供选择 远远超过另一个?

最佳答案

从一些基准测试来看 - 时间非常相似 - 但异常(exception)

return array('name','email');

快得多
return array_keys($this->fields);

为每种方法运行 10,000 次操作产生了这些平均值:

Variable:
    getFields    0.06s
    getRules     0.05s
Method:
    getFields    0.04s
    getRules     0.05s

要回答你的第二个问题 - 这取决于你的用例 - 如果存储在这些对象中的数据是静态的,或者它是否来自另一个数据源/配置文件。

一个后续问题,为什么不使用对象属性?

class Person extends Model {
    protected $name
    protected $email

    public function getName() {
        return $this->name;
    }

    public function getEmail() {
        return $this->email;
    }

}

关于php - 将 PHP 类设置存储在变量中或从方法中返回它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759183/

相关文章:

model - ER图: Ternary Relationship - How to read properly?

PHP:通过PHP文件下载头响应传递国际文件名给IOS客户端

php - 适用于 PHP5 的亚马逊机器镜像 (AMI)

language-agnostic - 为什么不能创建抽象类的对象?

PHP OOP 有很多 setter、getter

Java { Object a = new Object(); 之间的区别a.getVariable() } 和 { new Object().getVariable() }

python - 在 django 中获取基于时间的模型统计信息

php - 在 PHP 中使用 Gruber 的正则表达式进行网址匹配

javascript - 如何使用php或jquery过滤json?

ruby-on-rails - Rails select_tag 不会访问 belongs_to 关系