__METHOD__和__FUNCTION__

时间:2016-12-28 03:15:33

标签: php function class methods

我知道这两者之间的区别,并且我已经检查了手册。

我很困惑。我可以在类的方法中使用__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

任何帮助将不胜感激。感谢。

3 个答案:

答案 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;仅指函数名称

如果有任何澄清请与我联系..