У меня есть следующий класс в 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();
см. Наглядность и Оператор разрешения сферы действия (::) в главе op5 руководства php.
. Внутри статических методов нельзя вызывать переменные, используя $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();
?>