3

我一直在关注这个Symfony教程。在某些部分中,它只是告诉我在public functiona中添加 a,class但并没有说明我应该在课程的开头还是结尾添加它。

例如:

/**
 * JobeetCategory
 *
 * This class has been auto-generated by the Doctrine ORM Framework
 *
 * @package    jobeet
 * @subpackage model
 * @author     Your name here
 * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
 */
class JobeetCategory extends BaseJobeetCategory
{
  public function countActiveJobs()
  {
    $q = Doctrine_Query::create()
      ->from('JobeetJob j')
      ->where('j.category_id = ?', $this->getId());

    return Doctrine_Core::getTable('JobeetJob')->countActiveJobs($q);
  }

  public function getSlug()
  {
    return Jobeet::slugify($this->getName());
  }

  public function getActiveJobs($max = 10)
  {
    $q = Doctrine_Query::create()
      ->from('JobeetJob j')
      ->where('j.category_id = ?', $this->getId())
      ->limit($max);

    return Doctrine_Core::getTable('JobeetJob')->getActiveJobs($q);
  }
}

getActiveJObspublic 函数是教程中第一个显示的函数,也是countActiveJobs我根据教程添加的最后一个函数。

类中公共函数的顺序是否重要?

4

3 回答 3

18

类中公共函数的顺序是否重要?

不,它没有。班级作为一个整体进行评估;方法的顺序不相关。

所以虽然它没有任何约束力,但我遇到的最常见的顺序,也是我最喜欢的排序方法是,

class ClassName 
 {

  - Variable definitions

  - Class constants

  - Constructor 

  - Public methods

  - Destructor (if needed)

  - Magic functions (if needed)

  - Private / helper methods

  }
于 2010-08-10T10:44:39.500 回答
1

这是一个有很多答案和个人偏好的问题:-) 从技术上讲,这可能并不重要,但它确实很重要。

这是结构的一个建议。想象一下,您是第一次上课。也许您正在调用它的公共方法来执行某些任务,现在您想了解更多关于它的信息。从顶部的公共变量和函数开始似乎很自然。从抽象的角度考虑它。更高级别的抽象在类中处于较高位置。越往下走,抽象层次就越低。因此,从顶部的公共函数开始,您最终会在底部得到一堆私有函数。这将提高可读性。

同时我们希望其他函数调用的函数是关闭的,所以第一次调用函数时,把它放在调用函数的正下方。

一些实践将实例变量放在使用它的函数的正上方,但这会使类更难阅读。尤其是,如果有多个函数使用同一个实例变量,你不会知道去看。通常,将所有常量和实例变量放在顶部。

然后我们应该得到这样的结果:

class MyClass
{
    const MY_CONSTANT_ONE
    const MY_CONSTANT_TWO

    public $myPublicVariableONe
    public $myPublicVariableTwo
    protected $_myProtectedVariableOne
    private $_myPrivateVariableOne
    private $_myPrivateVariableTwo

    public function DoSomeOfficialStuff()
    {
        $this->_myNicePrivateMethodOne();
    }

    private myNicePrivateMethodOne(){
    }

    public function returnSomeOfficialStuff()
    {
        $this->_myNicePrivateMethodTwo();
    }

    myNicePrivateMethodTwo(){
    }
}
于 2011-04-05T11:03:20.767 回答
0

答案没有。这些函数将在其他地方调用,而不是从上到下执行。countActiveJobs 是在类的顶部还是底部没有任何区别。

于 2010-08-10T10:46:59.890 回答