Статический метод PHP Используя частные функции/Переменные класса

Если я пишу общедоступный статический метод в классе т.е...

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';
        }
6
задан Howard Zoopaloopa 28 July 2010 в 22:12
поделиться

2 ответа

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

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

2
ответ дан 9 December 2019 в 20:38
поделиться

Это на самом деле нормально, здесь нет ничего невозможного, насколько я могу судить. Ваш статический метод 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();
10
ответ дан 9 December 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: