php静态方法与非静态方法调用实例

发布时间:2020-03-17编辑:脚本学堂
本文介绍了php静态方法与非静态方法的用法,通过实例学习php静态方法的一些知识,在静态方法中可以调用静态方法,在静态方法中调用非静态方法报错等,需要的朋友参考下。

1、在静态方法中可以调用静态方法
 

复制代码 代码示例:
class Test{
 public static function a(){
 echo "这个静态方法的名字叫".__METHOD__."<br/>";
 self::b();
 }
 public static function b(){
 echo "这个被调用的静态方法的名字叫".__METHOD__;
 }
}
Test::a();
//打印结果
//这个静态方法的名字叫Test::a
//这个被调用的静态方法的名字叫Test::b

2、在静态方法中调用非静态方法(这个绝对不能用$this指针调用,肯定报错)
 

复制代码 代码示例:
class Test{
 public static function a(){
 echo "这个静态方法的名字叫".__METHOD__."<br/>";
 $this->b();
 }
 public function b(){
 echo "这个被调用的非静态静态方法的名字叫".__METHOD__;
 }
 }
 Test::a();
 //打印结果
 
//静态方法名字叫Test::a
 
//Fatal error: Using $this when not in object context in
 

找不到$this对象,静态方法调用,本来就应该通过类直接调用,而去通过类直接调用,那你肯定没有创建对象,没有对象,$this指针肯定不可使用,如果又要静态调用又同时在调用的方法里使用$this是矛盾的。

问题:那如果a是静态方法,b是非静态方法,想a调用b,该怎么做?
例子:
 

复制代码 代码示例:
self::b();//直接在a方法中使用静态调用方式
//打印结果
//这个静态方法的名字叫Test::a
//这个被调用的非静态静态方法的名字叫Test::b
 

结果可以通过静态方式调用非静态方法,但是我们如果去调用一个叫Test()的非静态方法那可以吗?
显然不行,因为这个方法很特别,它和类同名,所以它是构造方法,构造方法本身就不能被生明为静态方法。

3、在非静态方法中调用静态方法(这个估计可以)
 

复制代码 代码示例:
class Test{
 public static function a(){
 echo "这个静态方法的名字叫".__METHOD__."<br/>";
 
 }
 public function b(){
 echo "这个非静态静态方法的名字叫".__METHOD__.'<br/>';
 self::a();
 }
}
$test=new Test();
$test->b();
 
//这个非静态静态方法的名字叫Test::b
//这个静态方法的名字叫Test::a
 

4、在非静态方法中调用非静态方法。(这个就不用测了吧,这个如果不行的话,php要面向对象何用)
结论:
1.静态方法中可以调用静态方法和非静态方法,但是非静态方法的调用必须通过静态方式(类名::方法名),不能使用 $this
2.构造方法不能声明为静态,也不能通过静态方式调用
3.非静态方法中可以调用静态和非静态方法。

以上测试基于PHP Version 5.2.6。