代码之家  ›  专栏  ›  技术社区  ›  user228395

PHP中的私有方法应该在什么时候处理类变量,什么时候应该将这些方法用作函数?

  •  0
  • user228395  · 技术社区  · 14 年前

    我想知道什么时候私有/受保护的方法应该处理它的变量类(比如 $this->_results )当这些方法被用作函数时(比如 $this->_method($results) )示例如下:

    处理类属性

    <?php
    
    class TestA
    {
        protected $_results;
    
        public function getResults()
        {
            $this->_results = getFromWebservice();
            $this->_filterResults();
        }
    
        protected function _filterResults()
        {
            $this->_results = doMagic($this->_results);
        }
    }
    

    “作为功能”工作

    <?php
    
    class TestB
    {
        protected $_results;
    
        public function getResults()
        {
            $results = getFromWebservice();
            $this->_results = $this->_filterResults($results);
        }
    
        protected function _filterResults($results)
        {
            return doMagic($results);
        }
    }
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   NikiC    14 年前

    只要您确定,每个实例只需要维护一个结果变量,就始终使用第一个版本(它在类属性上工作)。这就是使用类的目的之一:拥有共享变量。

    实际上,可以将类属性视为隐式指定的方法的参数。(如果你在C++编程,你至少知道它确实是这样的。例如,可以通过将 const 在方法参数之后。)

        2
  •  1
  •   erisco    14 年前

    仅使用您给出的示例,这两种方法之间没有任何区别。你可以通过外推来发现差异,但它们实际上并不存在。

    我猜你是在尝试实现一个类而不首先设计它。因为这张图并不完整,所以没有明显的理由选择一种方法而不是另一种方法。

    当您开始充实您想要做的事情时,您可能会发现方法一将过滤例程绑定到类,而方法二鼓励将该例程与类分离。

    方法一

    • 副作用工作
    • 覆盖原始数据
    • 不能在其他数据上重复使用

    方法二

    • 虽然方法1可以很容易地修改以记住它已经完成了过滤,但是方法2将特别困难,尤其是在试图保持它的抽象化时。
    • 因为它是抽象的, filterResults 不再是逻辑名称,而是类似于 applyXyzFilter 很难证明留在课堂上是正当的