首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Namespaces and dynamic language features

(PHP 5 >= 5.3.0, PHP 7)

PHP's implementation of namespaces is influenced by its dynamic nature as a programming language. Thus, to convert code like the following example into namespaced code:

Example #1 Dynamically accessing elements

example1.php:

代码语言:javascript
复制
<?php
class?classname
{
????function?__construct()
????{
????????echo?__METHOD__,"\n";
????}
}
function?funcname()
{
????echo?__FUNCTION__,"\n";
}
const?constname?=?"global";

$a?=?'classname';
$obj?=?new?$a;?//?prints?classname::__construct
$b?=?'funcname';
$b();?//?prints?funcname
echo?constant('constname'),?"\n";?//?prints?global
?>

One must use the fully qualified name (class name with namespace prefix). Note that because there is no difference between a qualified and a fully qualified Name inside a dynamic class name, function name, or constant name, the leading backslash is not necessary.

Example #2 Dynamically accessing namespaced elements

代码语言:javascript
复制
<?php
namespace?namespacename;
class?classname
{
????function?__construct()
????{
????????echo?__METHOD__,"\n";
????}
}
function?funcname()
{
????echo?__FUNCTION__,"\n";
}
const?constname?=?"namespaced";

/*?note?that?if?using?double?quotes,?"\\namespacename\\classname"?must?be?used?*/
$a?=?'\namespacename\classname';
$obj?=?new?$a;?//?prints?namespacename\classname::__construct
$a?=?'namespacename\classname';
$obj?=?new?$a;?//?also?prints?namespacename\classname::__construct
$b?=?'namespacename\funcname';
$b();?//?prints?namespacename\funcname
$b?=?'\namespacename\funcname';
$b();?//?also?prints?namespacename\funcname
echo?constant('\namespacename\constname'),?"\n";?//?prints?namespaced
echo?constant('namespacename\constname'),?"\n";?//?also?prints?namespaced
?>

Be sure to read the note about escaping namespace names in strings.

← Using namespaces: Basics

namespace keyword and __NAMESPACE__ constant →

代码语言:txt
复制
 ? 1997–2017 The PHP Documentation Group

Licensed under the Creative Commons Attribution License v3.0 or later.

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com