问题在于标题。如何在PHP中声明一个方法为public但非静态?
回答
它们是默认的非静态:
public function method() {
}
,你会得到E_STRICT
如果静态称呼它,但我不认为你可以轻松地执行,它只能在一个实例调用 -
如果您尝试检查
您可以按照Artefacto的说法做$this
我认为您会收到错误消息。
isset($this)
,如果未设置,则会抛出异常。
如果'isset($ this)'为'false',则可以引发异常。 – Artefacto 2010-08-16 17:24:25
这仍然可以被称为静态函数。 – 2010-08-16 17:24:53
@Artefacto您是否看到过在所有非静态方法中明确执行此操作的代码?这看起来很麻烦。希望如果$ this没有设置,你会在方法内部出现某种错误。 – 2010-08-16 17:29:32
<?php
class abc() {
public function foo() {
...
}
}
$c = new abc();
$c->foo();
?>
foo()仍然可以通过abc :: foo()获得。 – 2010-08-16 17:26:17
是的,这是真的。我不知道另一种方式来做到这一点。功能是公共的和面向对象的(意味着这是一种方法) – Aziz 2010-08-16 17:30:01
<?php
class abc() {
public function foo() {
if (!isset($this)) {
throw new Exception('Method is non-static.');
exit();
}
}
}
$c = new abc();
$c->foo();
?>
未经测试。
@戈登:谢谢!我会更新这个问题来解决这个问题。 – 2010-08-16 17:30:20