类中PHP公共函数的顺序是否会影响其执行?

时间:2010-08-10 10:43:53

标签: php class function public

我一直在关注这个Symfony教程。在某些部分中,它只是告诉我在public function中添加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);
  }
}

getActiveJObs公共函数是本教程中的第一个,countActiveJobs是我根据教程添加的最后一个函数。

班级内公共职能的顺序是否重要?

3 个答案:

答案 0 :(得分:18)

  

班级内公共职能的顺序是否重要?

不,它没有。该课程作为一个整体进行评估;方法的顺序无关紧要。

所以虽然它没有任何约束力,但我遇到的最常见的订单,以及我最喜欢的订购方法是,

class ClassName 
 {

  - Variable definitions

  - Class constants

  - Constructor 

  - Public methods

  - Destructor (if needed)

  - Magic functions (if needed)

  - Private / helper methods

  }

答案 1 :(得分: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(){
    }
}

答案 2 :(得分:0)

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