這些對象調用有什麼區別?PHP:靜態和非靜態函數和對象
非靜態:
$var = new Object;
$var->function();
靜態:
$var = User::function();
而且還內class
我爲什麼要使用的功能的靜態屬性?
例如:
static public function doSomething(){
...code...
}
這些對象調用有什麼區別?PHP:靜態和非靜態函數和對象
非靜態:
$var = new Object;
$var->function();
靜態:
$var = User::function();
而且還內class
我爲什麼要使用的功能的靜態屬性?
例如:
static public function doSomething(){
...code...
}
靜態函數根據定義不能也不依賴於類的任何實例屬性。也就是說,他們不需要類的實例來執行(因此可以按照您在未首先創建實例的情況下顯示的那樣執行)。從某種意義上說,這意味着函數不會(也不會需要)依賴於類的成員或方法(公共或私有)。
靜態方法和成員屬於類本身,而不是一個類的實例。
靜態函數或字段不依賴於初始化;因此,是靜態的。
差異在變量範圍內。想象一下,你有:
class Student{
public $age;
static $generation = 2006;
public function readPublic(){
return $this->age;
}
public static function readStatic(){
return $this->age; // case 1
return $student1->age; // case 2
return self::$generation; // case 3
}
}
$student1 = new Student();
Student::readStatic();
你靜態函數可以不知道什麼是$這一點,因爲它是靜態的。如果可能有$這個,它將屬於$ student1而不是Student。
它也不知道什麼是$ student1。
它確實適用於情況3,因爲它屬於類的靜態變量,與前面的2不同,它屬於必須實例化的對象。
有關STATIC功能的問題不斷回來。
靜態函數根據定義不能也不依賴於類的任何實例屬性。也就是說,它們不需要類的實例來執行(因此可以執行)。從某種意義上說,這意味着函數不會(也不會需要)依賴於成員或方法(公共或私有)之類的。
class Example {
// property declaration
public $value = "The text in the property";
// method declaration
public function displayValue() {
echo $this->value;
}
static function displayText() {
echo "The text from the static function";
}
}
$instance = new Example();
$instance->displayValue();
$instance->displayText();
// Example::displayValue(); // Direct call to a non static function not allowed
Example::displayText();
-1在我看來,你在過去的幾個問題是關於基本的語言功能。我建議你在PHP手冊或任何一本書讀了第一。多次詢問基本語法的解釋是不適宜 – mario 2010-12-05 22:47:10
@mario。有點苛刻,也許cirk讀過手冊,並沒有完全理解這個概念,似乎很公平的問一些程序員的一些輸入。 – Ben 2010-12-05 22:58:14