__METHOD__和__FUNCTION__

问题描述 投票:6回答:3

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

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

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

php function class methods
3个回答
10
投票

“Method”基本上只是类(或类函数)中函数的名称。因此__METHOD__由类名和函数名称(dog :: name)组成,而__FUNCTION__只给出函数的名称,而不提及它可能在的类。当__METHOD__在类之外被调用时,它是与__FUNCTION__相同,因为没有类部件可用作前缀。

您可以在类之外使用__METHOD__,因为它是一个魔术常量,并且常量如果被滥用则不会抛出异常。 :) http://php.net/manual/en/language.constants.predefined.php


2
投票

让我澄清你的疑问..

首先,我将解释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静态上下文它显示类名称,如果它是非静态(简单函数)它只显示函数名称..


1
投票

在每种编程语言中..方法始终对应于Object。方法<==>对象,而函数始终对应于类和对象(静态函数)。

最后没有静态方法

&

在这种情况下..

METHOD =>包括类名FUNCTION =>仅指函数名

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

© www.soinside.com 2019 - 2024. All rights reserved.