|
|
|
|
<?
error_reporting(E_ALL);
class Class_0 {
private function pr(){
echo 'private_функция';
}
public static function pb(Class_0 $obj){
$obj->pr();
}
}
$obj = new Class_0;
Class_0::pb($obj);
|
почему выполняется вызов private из static ( а ведь не должно ) | |
|
|
|
|
|
|
|
для: oliss
(31.07.2010 в 19:53)
| | Рискну предположить, что это потому, что вы уже создали объект класса, таким образом Class_0::pb($obj); является обращением к методу, который в свою очередь обращается к методу того же класса, и это ключевой момент (то, что метод статический роли уже не играет).
Вот не создавать объект - пошлют нафиг, по идее :) | |
|
|
|
|
|
|
|
для: oliss
(31.07.2010 в 19:53)
| | > почему выполняется вызов private из static ( а ведь не должно )
А где такое написано?
http://ru.php.net/manual/en/language.oop5.visibility.php
Members declared as private may only be accessed by the class that defines the member.
Ни слова о static-членах.
И принцип инкапсуляции такое поведение совсем не нарушает. Все методы класса (включая static-методы) являются частью этого класса, а значит "имеют представление" о его внутренней структуре (о наличии и назначении private/protected членов). | |
|
|
|