# 魔术常量

`__LINE__` 用来获取文件中的当前行号。

```php
<?php

var_dump(__LINE__); // int(3)

```

`__FILE__` 用来获取当前文件的完整路径和文件名。

```php
<?php

var_dump(__FILE__);

```

`__DIR__` 用来获取当前文件所在的目录。

```php
<?php

var_dump(__DIR__);

```

`__FUNCTION__` 用来获取当前函数的名称。

```php
<?php

/**
 * Return the name of the current function.
 *
 * @param  void
 * @return string
 */
function foo(): string
{
    return __FUNCTION__;
}

var_dump(foo()); // string(3) "foo"

```

`__CLASS__` 用来获取当前类的名称。

```php
<?php

class Foo
{
    /**
     * Return the name of the current class.
     *
     * @param  void
     * @return string
     */
    public static function method(): string
    {
        return __CLASS__;
    }
}

var_dump(Foo::method()); // string(3) "Foo"

```

`__TRAIT__` 用来获取当前 Trait 的名称。

```php
<?php

trait Foo
{
    /**
     * Return the name of the current trait.
     *
     * @param  void
     * @return string
     */
    public static function method(): string
    {
        return __TRAIT__;
    }
}

class Bar
{
    use Foo;
}

var_dump(Bar::method()); // string(8) "Foo"

```

`__METHOD__` 用来获取当前类的方法名。

```php
<?php

class Foo
{
    /**
     * Return the method name of the current class.
     *
     * @param  void
     * @return string
     */
    public static function method(): string
    {
        return __METHOD__;
    }
}

var_dump(Foo::method()); // string(11) "Foo::method"

```

`__NAMESPACE__` 用来获取当前命名空间的名称（区分大小写）。

```php
<?php

namespace Foo;

class Bar
{
    /**
     * Return the name of the current namespace.
     *
     * @param  void
     * @return string
     */
    public static function method(): string
    {
        return __NAMESPACE__;
    }
}

var_dump(Bar::method()); // string(3) "Foo"

```

