У меня есть следующий класс в 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(); ?>