我知道这两者之间的区别,并且我已经检查了手册。
我很困惑。我可以在类的方法中使用__FUNCTION__
,这表示此方法的名称。当我回应它时,它只输出名称。这很清楚。
但为什么我可以在非calss方法中使用__METHOD__
。这也只代表正常功能的名称。正常功能是在某些容器中吗?当正常函数中的echo __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
任何帮助将不胜感激。感谢。
答案 0 :(得分:10)
&#34;方法&#34;基本上只是类(或类函数)中函数的名称。因此__METHOD__
由类名和函数名称(dog :: name)组成,而__FUNCTION__
仅为您提供函数的名称,而不引用它可能存在的类。
在类之外调用__METHOD__
时,它与__FUNCTION__
相同,因为没有类部件可用作前缀。
您可以在课堂外使用__METHOD__
,因为它是一个神奇的常量,而常量如果被误用则不会抛出异常。 :)
http://php.net/manual/en/language.constants.predefined.php
答案 1 :(得分:2)
让我澄清你的疑问......
首先,我将解释CLASS&amp; OBJECT(有什么区别......)
然后我将阐明FUNCTION&amp;方法(有什么不同......)
谈论Class ::这是你的逻辑实现..
object ::它是你的类的一个实例(实例~COPY~clim~ ...)
当你使用--NEW-- operator ---&gt;你正在创建一个OBJECT(除了COPY)你的课程。
CLASS =============&gt; 〜新〜=======&gt; OBJECT(你的班级的新副本..)同样
功能==========&gt; 〜新〜=======&gt;方法(属于对象而不是类)
Class是您正在编写的程序,而object是正在执行的类的副本。
类驻留在ROM(永久)中,其中对象驻留在RAM(临时存储区...)
中&安培;当你将一个函数声明为static时,它只属于class not not object&amp;你可以调用相同的(静态函数) 通过使用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();
?>
OUTPUT ::
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 时,它会显示类名 如果它是非静态的(简单函数),它将仅显示函数名称..
答案 2 :(得分:1)
在每种编程语言中。方法总是对应于Object。 方法&lt; ==&gt;宾语 而功能总是对应于班级和班级。对象(静态函数)。
最后没有静态方法
&安培;
在这种情况下..
方法 =&gt;包括类名 功能 =&gt;仅指函数名称
如果有任何澄清请与我联系..