考慮下面的代碼:衝突的非靜態的靜態瓦爾改變值
class A {
private $a;
function f() {
A::a = 0; //error
$this->a = 0; //error
$self::a = 0; //error
}
}
我怎樣才能改變F中$a
()?
考慮下面的代碼:衝突的非靜態的靜態瓦爾改變值
class A {
private $a;
function f() {
A::a = 0; //error
$this->a = 0; //error
$self::a = 0; //error
}
}
我怎樣才能改變F中$a
()?
你接近。或者:
self::$a = 0; //or
A::$a = 0;
如果它是靜態的,或者:
$this->a = 0;
如果它不是。
顯然我們都被問題的標題所欺騙,儘管這裏是你如何改變$ a的值。
<?php
class A {
private $a;
function f() {
//A::a = 0; //error
$this->a = 10; //ok
//$self::a = 0; //error
}
function display() {
echo 'a : ' . $this->a . '<br>';
}
}
$a = new A();
$a->f();
$a->display();
?>
輸出:
一個:10如果你想美元是靜態的使用以下
:
<?php
class A {
private static $a;
function f() {
//A::$a = 0; //ok
//$this->a = 10; //Strict Standards warning: conflicting the $a with the static $a property
self::$a = 0; //ok
}
function display() {
echo 'a : ' . self::$a . '<br>';
}
}
$a = new A();
$a->f();
$a->display();
// notice that you can't use A::$a = 10; here since $a is private
?>
那不是隻能是如果'$ a'被聲明爲'static'?我不明白爲什麼'$ this-> a = 0;'在上面的代碼中不起作用,除非他靜態地調用f()'... – DaveRandom
+1來修復這兩個問題! –
@DaveRandom,因爲在這種情況下,$ a是一個靜態成員,而一個靜態成員不屬於該對象,$ this返回對象引用。 –