本文介绍了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。