Если я пишу общедоступный статический метод в классе т.е...
public static function get_info($type){
switch($type){
case'title':
self::get_title();
break;
}
}
Я должен записать свой get_title () функция как общественность...
public static function get_title(){
return 'Title';
}
Иначе я получаю ошибку:
Call to private method Page::get_title()
Который заставляет меня чувствовать как будто функция get_info()
чрезвычайно избыточно. Я хотел бы смочь позвонить от статического метода до закрытого метода в моем классе в целях проверки. Действительно ли это невозможно?
PHP> 5.0 btw.
! ####### РЕДАКТИРУЮТ РЕШЕНИЕ (НО НЕ ОТВЕТ НА ВОПРОС) #########!
В случае, если Вам любопытно, мое обходное решение должно было инстанцировать класса моей статической функции в статической функции.
Так, именем класса была Страница, я сделаю это...
public static function get_info($type){
$page = new Page();
switch($type){
case'title':
$page->get_title();
break;
}
}
public function get_title(){
return 'Title';
}
да, это невозможно - нестатическому методу нужен объект для чтения данных, а суть статического метода в том, что к нему не прикреплен такой объект. вы можете представить себе каждый нестатический метод передачи неявного аргумента, объекта. у вас просто нет значения для передачи этого значения методу, если вы вызываете из статической функции.
обновление у вас может быть частная статическая функция - я не уверен, может ли ваш вопрос включать небольшое недопонимание частных и статических понятий как взаимоисключающих понятий
Это на самом деле нормально, здесь нет ничего невозможного, насколько я могу судить. Ваш статический метод get_title()
может быть приватным - или я что-то упустил? Если оба ваших статических метода, get_info()
и get_title()
, находятся в одном классе (независимо от того, является ли он статическим или нет), то ваш метод get_title()
может быть приватным, и ваш код все равно работает без ошибок. get_info()
вызывает get_title()
внутри класса - статически. get_title()
не обязательно должен быть публичным в вашем примере, если только он не должен быть доступен извне этого статического класса.
Доступ (public, protected и private) применяется как к статическим классам (где все методы статические), так и к экземплярам класса.
EDIT: Вам не нужно прибегать к инстанцированию класса, чтобы реализовать приватный доступ...
// Enable full error reporting to make sure all is OK
error_reporting(E_ALL | E_STRICT);
class MyStaticClass {
public static function get_info($type){
switch($type){
case 'title':
return self::get_title();
break;
}
}
private static function get_title() {
return 'Title';
}
}
// OK - get_info() calls the private method get_title() inside the static class
echo MyStaticClass::get_info('title');
// ERROR - get_title() is private so cannot be called from outside the class
echo MyStaticClass::get_title();