1.file1.php:

<?php
namespace foos;
class demo{
function testfn(){
echo "sdlkfjskdjf";
}
}
?>

2.main.php:

<?php
include './file1.php';
$getcls=new foos\demo;
$getcls->testfn(); //这里可以正常打印出来正常执行,说明namespace是一个顶层的层次命名
?>

或者你也可以这样写:

<?php
include './file1.php';
use foos/demo; //使用这个namespace
$getcls=new demo;
$getcls->testfn();
?>

使用namespace use的调用需要引入其他文件才可以调用其他文件的东西,才可以use其他文件的东西,否则无效。

以前没有namespace的时候直接引入文件然后直接调用,现在php有了namespace的主要目的是更好的区别模块,避免重命名冲突的现象,而不是为了实现模块的调用,调用还是include或require这些,namespace 和use主要还是为了建立命名上的层次关系,避免命名空间上的冲突。

use 某个namesp 和 直接 \namespace\cls 是一样的功能,所以我们可以看出namespace主要是为了区别层次关系,更好的定义文件的空间命名避免不必要的命名冲突。

3.use 使用的注意问题:

<?php
require './file1.php';
require './file2.php';
use filetwo\demo, //这里会报错,因为use了通用的类名,所以会报错,因为你在这个文件中使用demo的话,会有冲突,代码执行会不知道是哪个demo要调用
fileone\demo;
$getcls=new demo;
$getcls->testfn();
?>

正确的写法是这样:

<?php
require './file1.php';
require './file2.php';
use filetwo\demo as test, //重命名调用的模块,这样就不会在调用demo的时候冲突了
fileone\demo;
$getcls=new demo;
$getcls->testfn();
?>

namespace务必不要一样,但是你可以namespace下的东西可以和其他namespace下的东西一样,比如上面的demo在不同的namespace之下,但是他们是没有冲突的,就算你在同一个地方调用他们,他们也是不会有冲突,冲突的是调用方法的不当,比如第一种的调用方法会导致报错,第二种你重命名了其中一个,这样在通用文件中调用就可以区别开了,这样就不会报错了。

php namespace use 研究的更多相关文章

  1. c# .net framework 4.5.2 , Quartz.NET 3.0.7

    参考了:https://www.cnblogs.com/personblog/p/11277527.html, https://www.jianshu.com/p/b8e7e4deb60a .NET ...

  2. Linux覆盖率一点研究:获取覆盖率数据

     首先,当然哥不介意你鄙视我在网上找的资料研究! 白盒覆盖率是啥东东这个问题大家自己查百度啦!我也不太懂,就知道它不是个东西,就这样开始吧(MT一般是先摸四蹄呢还是先黑金币呢?这是个问题)! 首先:l ...

  3. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  4. BZOJ 4241 历史研究

    Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...

  5. 继续研究NDK

    继续研究NDK 我在阿里云服务器上搭建了Android ndk的开发平台,并且借助这一平台研究了NDK的内部细节. NDK提供了Android本地编程的接口,让你可以开发高效的依赖库,提高程序的速度, ...

  6. [WebService] the namespace on the "definitions" element, is not a valid SOAP version

    公司对外通过webservice访问别人接口,对方webservice IP地址发生变化,切换过去之后,始终报错,在网上搜索了各种办法之后,暂时总结该问题几种可能解决办法,待真正解决时用的到. 异常详 ...

  7. struts2学习:配置篇之namespace

    把namespace单独拉出来讲一方面是因为它实际上不是一个element,而只是一个attribute,前面已经说了,它是package的一个attribute:另外一方面是因为这个属性是我接触St ...

  8. 深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的

    前言 跟我一起顺藤摸瓜剖析 Artech 老师的 MiniMVC 是如何运行的,了解它,我们就大体了解 ASP.NET MVC 是如何运行的了.既然是“顺藤摸瓜”,那我们就按照 ASP.NET 的执行 ...

  9. The Linux Process Principle,NameSpace, PID、TID、PGID、PPID、SID、TID、TTY

    目录 . 引言 . Linux进程 . Linux命名空间 . Linux进程的相关标识 . 进程标识编程示例 . 进程标志在Linux内核中的存储和表现形式 . 后记 0. 引言 在进行Linux主 ...

随机推荐

  1. 用react编写一个hello world

    我要分享的是用react搭建一个简单的hello world, 一个小demo, 大神请略过 首先看一下目录结构 创建一个目录, 用于存放demo mkdir reactHello cd reactH ...

  2. mysql 不允许分组的问题

    异常信息:this is incompatible with sql_mode=only_full_group_by 解决办法: 找到  my.cnf  find / -name my.cnf 然后在 ...

  3. Reshape以及向量机分类学习和等高线绘制代码

    首先科普一下python里面对于数组的处理,就是如果获取数组大小,以及数组元素数量,这个概念是不一样的,就是一个size和len处理不用.老规矩,上代码: arr2 = np.array([-19.5 ...

  4. 在CentOS6.8系统上安装MySQL5.7(转)

    mysql-57">如何在CentOS 6.8系统上安装MySQL 5.7? 一.检查系统上是否已经安装MySQL 命令: ? 1 2 3 4 5 [root@localhost ~] ...

  5. mysql57免安装版配置

    1,下载mysql5.7压缩文件[具体到官网下载就行了] 2,解压并把mysql5.7放到c盘根目录下 3,进入mysql5.7主目录修改my-default.ini 重命名为:my.ini [如果没 ...

  6. 代码编辑器之EditPlus

    引用及下载地址:http://www.iplaysoft.com/editplus.html EditPlus是一套功能非常强大的文字编辑器,拥有无限制的Undo/Redo(撤销).英文拼字检查.自动 ...

  7. VSFTP再配置 我里个去马蛋网上这么多烂文章,走了好多弯路

    1.CentOS 进行yum 安装 vsftpd 2.vi /etc/vsftpd/vsftpd.conf  进行配置 3.创建FTP 用户 # useradd –d /var/www -g ftp ...

  8. php 测试 程序执行时间,内存使用情况

    memory_get_usage 可以分析内存占用空间. microtime 函数就可以分析程序执行时间. 上栗子: echo '开始内存:'.memory_get_usage(), ''; $tmp ...

  9. 【Nginx】之安装使用和配置SSL支持

    本文采用的是nginx源码安装 1.下载nginx源码包 wget http://nginx.org/download/nginx-1.8.0.tar 或者登录nginx官网下载更高版本 2.ngin ...

  10. C/C++基础--面向对象编程OOP

    基类通常定义一个虚析构函数,通过基类指针析构派生类对象时不会出现未定义的行为. 如果一个类定义析构函数,编译器不会为这个类合成移动操作. 虚函数覆盖,可以显式地加override,可以让程序员的意图更 ...