【问题标题】:what is \ used for in PHP namespace or class elements在 PHP 命名空间或类元素中 \ 用于什么
【发布时间】:2018-08-04 07:23:20
【问题描述】:

多年来,我一直在为我们的内部闭源项目维护 PHP 框架。

当我更新此内容并使用 PHP 7 保持编码标准时,我注意到许多开发人员在代码中调用的类和命名空间中使用 \。

例如

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}

或者例如在类的函数中调用类

public function featured()
{
    // Check for request forgeries
    \Session::checkToken() or jexit(\Text::_('JINVALID_TOKEN'));

    $user   = \Factory::getUser();
    $ids    = $this->input->get('cid', [], 'array');
    $values = ['featured' => 1, 'unfeatured' => 0];
    $task   = $this->getTask();
    $value  = \ArrayHelper::getValue($values, $task, 0, 'int');
}

为什么使用 \ 以及它的目的是什么,因为它也可以在没有 \ 的情况下工作。

因为我在网上看不到任何信息,所以 \ 在类和命名空间中的用途。

【问题讨论】:

  • 在开头使用 \ 指定类在全局命名空间中。没有它它也可以工作,但如果你开始声明自己的命名空间,你需要它,因为它与你当前的命名空间不同。

标签: php class namespaces


【解决方案1】:

这里有解释:http://php.net/manual/en/language.namespaces.fallback.php

当执行一个文件时,它有自己的命名空间。从上面的页面看这段代码:

<?php
namespace A\B\C;
class Exception extends \Exception {}

$a = new Exception('hi'); // $a is an object of class A\B\C\Exception
$b = new \Exception('hi'); // $b is an object of class Exception

$c = new ArrayObject; // fatal error, class A\B\C\ArrayObject not found
?>

$a = new Exception('hi'); 使用当前命名空间中的 Exception 类,即 A\B\C

$b = new \Exception('hi'); 使用全局类Exception

【讨论】:

  • 太棒了,这就是我一直在寻找的东西,因为我什至不确定 \ 的点在命名空间中的用途。现在这是有道理的。因此,只要我们使用命名空间 A\B\C 作为示例,这也可以停止类似名称但不同框架的冲突;并调用 \Example::method();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 2012-08-10
  • 1970-01-01
  • 2021-11-10
  • 2014-09-22
  • 1970-01-01
  • 2014-09-30
相关资源
最近更新 更多