静态方法定义,上面的代码会输出

时间:2020-02-13 16:34来源:美高梅手机游戏网站
在PHP的非静态方法中可以调用静态方法 静态调用非静态方法!!这在java,c#中是不可想象的,也是绝对不行的。这样的错误在这些语言中会在编译阶段就被指出错误的。但是对于php这样

在PHP的非静态方法中可以调用静态方法

静态调用非静态方法!!这在java,c#中是不可想象的,也是绝对不行的。这样的错误在这些语言中会在编译阶段就被指出错误的。但是对于php这样的动态语言呢?首先这个是语法没有错误的,php –l 找不出错误来的。如果运行呢?
先看一个例子 复制代码 代码如下:
class myClass
{
    private $name = "myClass";

PHP也不例外!所谓静态方法(属性)就是以static关键词标注的属性或者方法(例如:静态属性public static username;)
静态方法和非静态方法最大的区别在于他们的生命周期不同,用一个实例来说明

class test{ public static function strPrint(){ echo 'this is strPrint static function
'; } public function staticFuncInvoke; }}$test = new test();$test->staticFuncInvoke();

    public function echoName(){
        echo $this->name;
    }

静态方法定义

上面的代码会输出: this is strPrint static function.

    public function getName(){
        $this->echoName();
    }
}

定义静态方法很简单,在声明关键词function之前加上static,例如:

而下面的代码会直接挂掉,php直接给出fatal error:

class newClass
{
    private $name = "newClass";

 代码如下

Fatal error: Using $this when not in object context in E:htdocstestcontent.php on line 6

    public function echoName(){
        echo $this->name;
    }

class A
{
    static function fun()
    {
        // do somathing
    }
}

class test{ public static function strPrint(){ $this->staticFuncInvoke(); } public function staticFuncInvoke(){ echo 'this is a nonstatic function named staticFuncInvoke'; }}test::strPrint();

    public function test() {
        myClass::getName();
        echo "n";
    }
}

静态方法使用

以上就是小编为大家带来的浅谈PHP中静态方法和非静态方法的相互调用全部内容了,希望大家多多支持脚本之家~

$app = new newClass();
$app->test();

使用的时候和静态变量差不多,不需要实例化,直接用::调用,例如:

这个代码的最终调用结果是什么呢?(运行环境PHP 5.3.10 )

 代码如下

手机美高梅游戏网址 1

A::fun()

看这个结果,有几个地方值得注意:

对比普通方法
因为静态方法的调用不需要实例化,所以在静态方法中引用类自身的属性或者方法的时候会出错,也就是形如self和$this是错误的。

首先是myClass::getName() 这是一个静态函数的调用
但是看一下myClass的getName()函数,它却并不是一个静态函数。

 代码如下

其次返回的结构 先是返回PHP Strict Standards Error。熟悉php的人应该知道,Strict Error是php的编码标准化警告,一般是由于php为了保持向前兼容而报出的错误。那这么说,非静态函数的静态调用在php5.3之前的某个版本是允许的,只是在后面的版本是不被建议使用!!

class MyClass
{
    public $num = 5;

美高梅手机游戏网站 ,好了,如果你现在将Strict Error在error_reporting中注释掉,返回结果就变成了newClass!手机美高梅游戏网址 ,!

    function __construct()
    {
        $this->num = 10;
    }

编辑:美高梅手机游戏网站 本文来源:静态方法定义,上面的代码会输出

关键词: