我知道这两者之间的区别,我已经检查了手册。
我还有一些困惑。我可以在类的方法中使用__FUNCTION__
,这代表了这个方法的名称。当我回应它时,它只输出名称。这里很清楚。
但为什么我可以在非calss方法中使用__METHOD__
。这也只代表正常功能的名称。正常功能是在某些容器中吗?当正常功能中回声__METHOD__
时,容器什么都没有?
码:
<?php
class dog {
private $name = 'dog';
public static function name() {
echo __METHOD__;
echo"\n";
echo __FUNCTION__;
echo"\n";
}
}
function test() {
echo __FUNCTION__;
echo"\n";
echo __METHOD__;
}
dog::name();
test();
输出:
ei@localhost:~$ php test.php
dog::name
name
test
test
任何帮助将不胜感激。谢谢。
“Method”基本上只是类(或类函数)中函数的名称。因此__METHOD__
由类名和函数名称(dog :: name)组成,而__FUNCTION__
只给出函数的名称,而不提及它可能在的类。当__METHOD__
在类之外被调用时,它是与__FUNCTION__
相同,因为没有类部件可用作前缀。
您可以在类之外使用__METHOD__
,因为它是一个魔术常量,并且常量如果被滥用则不会抛出异常。 :) http://php.net/manual/en/language.constants.predefined.php
让我澄清你的疑问..
首先,我将解释CLASS&OBJECT(有什么区别..)
然后我将澄清有关功能和方法(有什么区别..)
谈论Class ::这是你的逻辑实现..
object ::它是你的类的一个实例(实例~COPY~clim~ ...)
当你使用--NEW--操作符--->你正在创建一个OBJECT(除了COPY)你的类。
CLASS =============> ~NEW~ =======> OBJECT(你的班级的新副本..)同样
功能==========>〜新〜=======>方法(属于对象而不是类)
Class是您正在编写的程序,而object是正在执行的类的副本。
class驻留在ROM(永久)中,其中对象驻留在RAM(临时存储区...)中
&当你将一个函数声明为static时,它只属于不对象的类,你可以使用ClassName :: staticFunctionName()调用相同的(静态函数)
这就是为什么不存在STATIC_METHOD而是STATIC_FUNCTION!
代码示例::
<?php
class Dog extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index($params='')
{
}
private $name = 'dog';
public static function name()
{
echo 'Inside static function & inside class'.'<br>';
echo __METHOD__.'<br>';
echo __FUNCTION__.'<br>';
}
public function test2()
{
echo 'Inside NON STATIC function & inside class'.'<br>';
echo __FUNCTION__.'<br>';
echo __METHOD__.'<br>';
}
}
function test()
{
echo 'Inside NON STATIC function & OUTSIDE class'.'<br>';
echo __FUNCTION__.'<br>';
echo __METHOD__.'<br>';
}
Dog::name();
test();
$somevar = new Dog;
$somevar->test2();
?>
输出::
Inside static function & inside class
Dog::name //Class::function
name
Inside NON STATIC function & OUTSIDE class
test
test
Inside NON STATIC function & inside class
test2
Dog::test2 //Object::method
在你的情况下,因为你正在使用METHOD IN静态上下文它显示类名称,如果它是非静态(简单函数)它只显示函数名称..
在每种编程语言中..方法始终对应于Object。方法<==>对象,而函数始终对应于类和对象(静态函数)。
最后没有静态方法
&
在这种情况下..
METHOD =>包括类名FUNCTION =>仅指函数名
如有任何澄清请与我联系..