2014-01-13 2 views
0

Я действительно, очень новичок в ООП на PHP, поэтому, пожалуйста, расскажите мне об этом.Методы группировки в PHP

Есть ли способ связать определенные функции в классе? Это похоже на создание подкласса.

Например, как я могу сделать что-то вроде этого ?:

className::food::fruit('lemon'); 

Возможно ли это?

+1

Вы можете расширить свой класс с другого. Класс a расширяет b ... тогда класс b имеет доступ к методам: s. Расширение цепей может быть настолько глубоким, насколько вы хотите. – makallio85

ответ

2

Вы не можете непосредственно отдельные функции в пределах одного класса в различных эталонных трактов на основе имени класса, как это. Ближайшей доступной вещью будет использование пространств имен (доступно с PHP 5.3+) и создание нескольких классов в вашем пространстве имен, каждый со своим набором функций. Пример:

namespace className; 

class food { 

    static function fruit() { 

    } 

} 

Назвали бы по

className\food::fruit('lemon'); 

Это не имеет смысла называть имен «Classname» - используется только, чтобы соответствовать вашему примеру.

Пространства имен могут иметь много уровней вложенности, если вам нужно больше уровней группы.

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

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

Более подробная информация здесь: http://php.net/namespaces

Примечание - я думаю, что наследование будет правильным способом пойти основываясь на вашем примере кода - пространств имен не звучат как хорошо подходят для примера, приведенного - однако, если вы хотите «подклассы», как указано в вашем вопросе, могут быть ближе к тому, что вы ищете.

Комбинация двух, вероятно, даст лучший результат (и это очень распространенная практика).

0

PHP поддерживает наследование, поэтому вы можете написать класс фруктов, а затем еще один дочерний класс, лимон, который наследует фрукты.

0

См. Этот пример для использования расширений классов и абстрактных классов.

// Abstract class can regisiter functions that MUST be implemented by extending 
// classes 
abstract class Fruit { 
    public function type(); 
} 

// Lemon extends Fruit, so it must implement its own version of the type() method. 
class Lemon extends Fruit { 
    public function type() { 
     return "Lemon"; 
    } 
} 

// Grape also extends Fruit, but this will create an error because it is not 
// implementing the type() method in the abstract class Fruit 
class Grape extends Fruit { 
} 


$lemon = new Lemon(); 
echo $lemon->type(); 

// This will give you an error because the Grape class did not implement the 
// type() as the Fruit class requires it to. 
$grape = new Grape(); 
echo $grape->type(); 

Документация по PHP отлично справляется с расширением класса.

http://www.php.net/manual/en/language.oop5.abstract.php

Смежные вопросы