Как я могу использовать Class :: Function (params) без статического

0

* Извините, сейчас я изучаю английский, и мой английский все еще не так хорош. Пожалуйста, поймите мою ситуацию.

Насколько мне известно, Static требуется использовать как Class :: Function (params);
Как этот.

class Foo {
    static function Bar($msg){
        echo $msg;
    }
}

В XE есть один файл (CMS разработан в Корее).
(Официальный сайт XE: http://www.xpressengine.com/?l=ru)

Конечно, это резюме реального файла

<?php

/**
 * Manages Context such as request arguments/environment variables
 * It has dual method structure, easy-to use methods which can be called as self::methodname(),and methods called with static object.
 */

class Context
{
   /**
    * codes after <body>
    * @var string
    */
   public $body_header = NULL;

   /**
    * returns static context object (Singleton). It to use Context without declaration of an object
    *
    * @return object Instance
    */
   function &getInstance()
   {
      static $theInstance = null;
      if(!$theInstance)
      {
         $theInstance = new Context();
      }
      return $theInstance;
   }

   /**
    * Add html code after <body>
    *
    * @param string $header Add html code after <body>
    */
   function addBodyHeader($header)
   {
      is_a($this, 'Context') ? $self = $this : $self = self::getInstance();
      $self->body_header .= "\n" . $header;
   }
}

Это комментарий в верхней части этого файла.

Он имеет двойную структуру метода, простые в использовании методы, которые можно назвать self :: methodname() и методы, вызываемые со статическим объектом.

В этом комментарии он может использовать Class :: Function(), и я использовал его в XE.
Но это не говорит, как они это делают. Как я могу это сделать?

Редактировать 1:

Имя файла Context.class.php и включено в другие файлы.

<?php
    require(_XE_PATH_ . 'classes/context/Context.class.php');
    Context::addBodyHeader("Some Codes");
?>
  • 0
    Вы спрашиваете, потому что self::getInstance() вызывает getInstance который не является статическим методом?
  • 0
    @kingkero Нет, "Context :: addBodyHeader (...)" можно использовать в другом файле XE. И это не статическая функция.
Теги:

3 ответа

2
Лучший ответ

В этом комментарии он может использовать Class :: Function(), и я использовал его в XE. Но это не говорит, как они это делают. Как я могу это сделать? :: называется оператором разрешения области.

Они делают это следующим образом:

class MyClass {
    public static function saySomething() {
        echo 'hello';
    }
     public function sayHello() {
        echo 'hello';
    }

    public function helloSay() {
        self::sayHello();
    }
}

MyClass::saySomething();

MyClass::sayHello();

MyClass::helloSay();

Все они выводят: hello

  • 0
    Но "Context :: addBodyHeader (...)" можно использовать в XE. И это не статическая функция.
  • 0
    пожалуйста, посмотрите "без статики" в заголовке вопроса
Показать ещё 3 комментария
2

В этом случае они используют self, который не нуждается в статике, вы можете сравнить self:: с $this->, только это self:: также работает для статических функций.

Возможно, руководство поможет вам

  • 0
    Но "Context :: addBodyHeader (...)" можно использовать в XE. И это не статическая функция.
  • 0
    пожалуйста, посмотрите "без статики" в заголовке вопроса
1

Не уверен, что это то, что вы пытаетесь сделать, но вы можете объявить "статический" в public static function methodName() php public static function methodName() а затем вызвать функцию с помощью Class::Method() Вы также можете проверить это для получения дополнительных данных о статических,

РЕДАКТИРОВАТЬ:

Это от php.net:

Псевдопеременная $ this доступна, когда метод вызывается из контекста объекта. $ это ссылка на вызывающий объект (обычно объект, к которому принадлежит этот метод, но, возможно, другой объект, если метод вызван статически из контекста вторичного объекта).

Таким образом, вы можете сделать это (статический метод вызова класса классов).

  • 0
    Но "Context :: addBodyHeader (...)" можно использовать в XE. И это не статическая функция.
  • 0
    пожалуйста, посмотрите "без статики" в заголовке вопроса
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню