PHP定义类中不能有$this?

来源:百度知道 编辑:UC知道 时间:2024/09/20 23:30:52
<?php
class Abc{
public static $a1 = "im a1!<br/>";
public static function go()
{
echo($this->a1);

}
}

Abc::go();
?>

这段代码运行时提示
Fatal error: Using $this when not in object context in F:\Lab\PHPnow\htdocs\1.php on line 6

貌似是说定义类时不能包含$this?

可是我看很多其他的源代码在类的定义中都有$this的啊。。
问下是怎么回事
看了一楼的答案

可是令我不解的是在有些源码里确确实实看到了有的CLASS定义的函数中出现了$this,不知道是为什么。。

还有。如果用了self::$a1的话
那么下面的代码:

$a = new Abc;
$a->a1 = "gogogo";
$a->go();

输出的结果仍然是im a1
我想要go这个函数的作用就是输出Abc的对象中变量a1的值这个要怎么做到呢?

你没有理解静态变量和实例变量的区别。
有static修饰的变量和函数不能出现$this
你看到的函数一定没有static

建议你系统的学习一下PHP,这样瞎猜是很浪费时间的

static $a1和self::$a1或者$a::$a1是一起使用的。
var $a1和$this->a1是一起使用的

class Abc{
static $a1;
}
class Abc{
var $a1;
}
两个$a1是不同的。
第一个用self::$a1或者$a::$a1引用,
第二个用$this->$a1或者$a->a1引用

首先static的函数里不能出现$this,只能是self

class Abc{
public static $a1 = "im a1!<br/>";
public static function go()
{
echo(self::$a1);

}
}

Abc::go();
?>

静态函数的引用必须用self::$a1;
如果是在类外面用就:echo(Abc::$a1);

静态函数是这个类的函数,而不是属于单个对象实例的函数。既然不是实例,那个$this指向谁? 所以说经态函数里是不能用$this的。