Выполнение PHP-класса неклиентского кодера - PullRequest
0 голосов
/ 05 июля 2011

Просто вопрос теории

При создании класса, который не будет использоваться другими клиентскими кодировщиками, какой метод выполнения лучше?Рассмотрим следующее:

class Test
{
    public function __construct()
    {
        $this->foo();
        $this->bar();
    }

    public function foo(){ //do something }

    public function bar(){ //do something }
}

$test = new Test;

Поскольку я точно знаю, что я хочу, чтобы этот класс делал, и порядок, в котором это нужно делать, я просто вызываю функции во время конструирования.Однако то же самое можно сделать, выполнив:

class Test
{
    public function __construct(){}

    public function foo(){ //do something }

    public function bar(){ //do something }
}

$test = new Test();
$test->foo();
$test->bar();

Каковы преимущества выполнения этого так или иначе?Будь то производительность, отладка и т. Д.

Редактировать

Это вопрос общего назначения.Хотите узнать обо всех возможностях и проблемах, связанных с этими двумя способами выполнения методов в классе.

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

1-ым способом вы можете сделать эти функции private и использовать их только внутри самого объекта.

class Test
{
    public function __construct()
    {
        $this->foo();
        $this->bar();
    }

    private function foo(){ //do something }

    private function bar(){ //do something }
}

$test = new Test; 
//so:
$test->foo(); //will throw an error

Если вы сделаете функции protected вместо private, любой класс, унаследованный от этого класса, сможет использовать функции (при этом не допуская вызова функций извне)


С вашим вторым параметром любой объект может вызывать эти функции вне определения класса, и, в зависимости от вашего кода, вы можете этого не хотеть.

1 голос
/ 05 июля 2011

Чтобы уточнить ответ Нила: если можете, сделайте функции частными.Таким образом, если вы захотите изменить их позже, вы знаете, что они используются только внутри своего класса.

Итак, чтобы ответить на ваш вопрос: первый ответ предпочтительнее, потому что облегчает поддержку вашего кода.По производительности, разницы нет.

...