2012-01-13 2 views
0

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

Так что я, например, один класс:

class SomeClass { 
    public function someFunction() { 
     ... 
    } 
} 

И продолжение этого:

class Extension extends SomeClass { 
    public function someOtherFunction() { 
     ... 
    } 
} 

мой вопрос, могу ли я быть в состоянии использовать общественные функции внутри классов на обоих способы, функции основного класса внутри расширенной функции и наоборот?

И я буду делать это как?

ответ

1

Вы можете использовать public и protected функции родителя в расширенной (ребенок) класса:

class Extension extends SomeClass 
{ 
    public function someOtherFunction() { 
     $foo = $this->someFunction(); // from parent class 
     return $foo; 
    } 
} 

Когда класс «Расширение» создан, его в основном копия «SomeClass», которые вы можете изменить в том виде, как вы можете добавить новые функции или перезаписать те из родительского класса.

Родитель не знает о расширении (его можно продлить несколько раз, например «JSONRequest extends Request», «XMLRequest extends Request»). Вызов расширенных функций из родителя не имеет смысла, так как родительский класс никогда не может знать, какую дочернюю функцию он должен вызывать в такой ситуации. Этот тип Наследования является одной из основных концепций ООП и четких интерфейсов.

Другими словами, нет, он никогда не будет работать наоборот. И это не должно.

+0

Я вижу, поэтому, если я хочу использовать расширенные функции класса внутри основного класса, мне лучше сделать отдельный класс. Вот почему я спросил, но кажется, что нет никакого способа обойтись, но сделать отдельный класс. – Roland

+0

есть способ вокруг. Почему бы вам просто не использовать свой «SomeClass»? – Kaii

+0

Вы имеете в виду определение функций, которые мне нужны внутри SomeClass? Да, это было бы так, но я хотел, чтобы он был разделен, каждый из классов сделал бы что-то другое, без какого-либо отношения друг к другу. – Roland

3

Вы можете использовать обе функции из класса Extension, но только someFunction() из класса SomeClass.

Расширение не меняет первоначальный класс, оно просто включает его в новый.

+0

Да, расширение на самом деле является расширением основного класса, я понял, что из руководства PHP, но вы говорите, что я могу использовать 'someFunction()' внутри расширенного класса, но я не могу использовать 'someOtherFunction() 'внутри основного класса? – Roland

+0

Точно: расширение - это односторонний процесс - новый класс получает все от старого класса, но старый класс ничего не получает, он остается неизменным. Поэтому в вашем случае старый класс не знает о новой функции. –

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