程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP使用靜態方法的幾個注意事項,php靜態

PHP使用靜態方法的幾個注意事項,php靜態

編輯:關於PHP編程

PHP使用靜態方法的幾個注意事項,php靜態


本文實例介紹了PHP使用靜態方法的幾個常見注意事項。分享給大家供大家參考。具體方法如下:

1. 即使類中的方法並未用static聲明,但其未使用到可改變的類成員變量,在外部仍可用操作符::來調用;

2. 以靜態方式(用::操作符)調用的方法中$this的取值是由調用時的上下文決定的!而不是定義他的類!!

例如以下的代碼:

<?php 
class TestClass1 
{ 
  public $normal_v = 'normal_v from TestClass1'; 
  public static $STATIC_V = 'STATIC_V from TestClass1'; 
  public function test_func1() 
  { 
    echo $this->normal_v.'<br />'.self::$STATIC_V; 
  } 
} 
class TestClass2 
{ 
  public $normal_v = 'normal_v from TestClass2'; 
  public static $STATIC_V = 'STATIC_V from TestClass2'; 
  public function test_func2() 
  { 
    TestClass1::test_func1(); 
  } 
} 
$t2 = new TestClass2(); 
$t2->test_func2(); 

這段代碼是輸出會是什麼呢,我原以為會是normal_v from TestClass1 <br /> STATIC_V from TestClass1,測試發現其實我錯了,正確的輸出是:

normal_v from TestClass2
STATIC_V from TestClass1

說明:test_func1()雖然是在TestClass1中定義的,但卻是在TestClass2中調用的,其內部的$this變量則是由TestClass2決定的!

其實這兩個類的關系應該屬於"雙向關聯".

感興趣的朋友可以測試運行本文實例,相信會有新的收獲!


php中對於靜態方法的問題

self::是代表在本類裡調用靜態方法get();因為在靜態方法裡面只能調靜態方法,不能調用實例方法,如果調用實例方法的話那就用this,
 

php的靜態方法調用問題

PHP目前兩種方法都可以用,靜態類,只是說方便調用,不用初始化類。
但如果你的寫法不對的話。靜態類就失去了靜態調用的能力。
舉個錯誤的例子。

<?php
class Cat {
}
class Hypnotic_Cat extends Cat
{
public $string = "The cat was hypnotized.\r\n";
function Hypnotic_Cat()
{
}
public static function hypnotize()
{
echo self::$string;
}
}
Hypnotic_Cat::hypnotize();
$hypnotic_cat = new Hypnotic_Cat();
$hypnotic_cat->hypnotize();
?>

正確的例子

<?php
class Cat {
}
class Hypnotic_Cat extends Cat
{
public static $string = "The cat was hypnotized.\r\n";
function Hypnotic_Cat()
{
}
public static function hypnotize()
{
echo self::$string;
}
}
Hypnotic_Cat::hypnotize();
$hypnotic_cat = new Hypnotic_Cat();
$hypnotic_cat->hypnotize();
?>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved