Intereting Posts

Как получить доступ к частному члену внутри статической функции в PHP

У меня есть следующий класс в PHP

class MyClass { // How to declare MyMember here? It needs to be private public static function MyFunction() { // How to access MyMember here? } } 

Я полностью смущен тем, какой синтаксис использовать

$MyMember = 0; и echo $MyMember

или

private $MyMember = 0; и echo $MyMember

или

$this->MyMember = 0; и echo $this->MyMember

Может ли кто-нибудь сказать мне, как это сделать?

Я немного не сильна в OOPS.

Можете ли вы сделать это в первую очередь?

Если нет, как я должен объявить участника, чтобы я мог получить к нему доступ в статических функциях?

 class MyClass { private static $MyMember = 99; public static function MyFunction() { echo self::$MyMember; } } MyClass::MyFunction(); 

см. « Оператор разрешения видимости и видимости» (: 🙂 в главе oop5 руководства по php.

Это супер поздний ответ, но это может помочь кому-то.

 class MyClass { private $MyMember; public static function MyFunction($class) { $class->MyMember = 0; } } 

Это работает. Вы можете получить доступ к частному члену таким образом, но если у вас есть класс $ class, вы должны просто сделать MyFunction одним из методов класса, так как вы просто вызываете $ class-> MyFunction (). Однако у вас может быть статический массив, в который каждый экземпляр добавляется в конструктор класса, к которому эта статическая функция может обращаться и проходить через, обновляя все экземпляры. то есть ..

 class MyClass { private $MyMember; private static $MyClasses; public function __construct() { MyClass::$MyClasses[] = $this; } public static function MyFunction() { foreach(MyClass::$MyClasses as $class) { $class->MyMember = 0; } } } 

В статических методах вы не можете вызывать переменную с помощью $this потому что статические методы вызывают вне контекста экземпляра.

Это четко указано в документе PHP .

 <?php class MyClass { // A) // private $MyMember = 0; // B) private static $MyMember = 0; public static function MyFunction() { // using A) // Fatal error: Access to undeclared static property: // MyClass::$MyMember // echo MyClass::$MyMember; // using A) // Fatal error: Using $this when not in object context // echo $this->MyMember; // using A) or B) // echo $MyMember; // local scope // correct, B) echo MyClass::$MyMember; } } $m = new MyClass; echo $m->MyFunction(); // or better ... MyClass::MyFunction(); ?>