* Извините, сейчас я изучаю английский, и мой английский все еще не так хорош. Пожалуйста, поймите мою ситуацию.
Насколько мне известно, 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");
?>
В этом комментарии он может использовать 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
В этом случае они используют self
, который не нуждается в статике, вы можете сравнить self::
с $this->
, только это self::
также работает для статических функций.
Возможно, руководство поможет вам
Не уверен, что это то, что вы пытаетесь сделать, но вы можете объявить "статический" в public static function methodName()
php public static function methodName()
а затем вызвать функцию с помощью Class::Method()
Вы также можете проверить это для получения дополнительных данных о статических,
РЕДАКТИРОВАТЬ:
Это от php.net:
Псевдопеременная $ this доступна, когда метод вызывается из контекста объекта. $ это ссылка на вызывающий объект (обычно объект, к которому принадлежит этот метод, но, возможно, другой объект, если метод вызван статически из контекста вторичного объекта).
Таким образом, вы можете сделать это (статический метод вызова класса классов).
self::getInstance()
вызываетgetInstance
который не является статическим методом?