Ответ 1
class MyClass
{
private static $MyMember = 99;
public static function MyFunction()
{
echo self::$MyMember;
}
}
MyClass::MyFunction();
см. Visibility и Оператор разрешения области (::) в главе oop5 руководства по 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();
см. Visibility и Оператор разрешения области (::) в главе 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 doc.
<?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();
?>