VS解决方案、命名空间和项目的关系

这篇具有很好参考价值的文章主要介绍了VS解决方案、命名空间和项目的关系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

∥例二
/∥在脚本前面输出了一些字符<?php namespace Article;?>
为什么要说第一个命名空间呢?因为同一脚本文件中可以创建多个命名空间。
下面我创建了两个命名空间,顺便为这两个空间各自添加了一个Comment类元素:复制代码代
码如下:<?php /∥创建一个名为'Article'的命名空间 namespace Article;/∥此Comment属于Article空间的元素 class Comment {) /∥创建一个名为'MessageBoard'的命名空间namespace MessageBoard;/∥此Comment属于 MessageBoard空间的元素class Comment{}?>
在不同空间之间不可以直接调用其它元素,需要使用命名空间的语法:复制代码代码如下:<?p hp namespace Article; class Comment {} namespace MessageBoard;class Comment{}//调用当前空间(MessageBoard)的Comm ent类$comment=new Comment0;//调用Article空间的Comment类 $article comment = new Article\Comment0; ?>
可以看到,在MessageBoard空间中调用article空间里的Comment类时,使用了一种像文件路
径的语法:\空间名\元索名
除了类之外,对函数和常量的用法是一样的,下面我为两个空间创建了新的元素,并在Message
Board空间中输出了它们的值。复制代码代码如下:<?php namespace Article;const PATH='/art icle'; function getCommentTotal0 {return 100;} class Comment {} namespace MessageBoard; const PATH = '/message_board'; function getCommentTotal 0{return 300;}class Comment{}/∥调用当前空间的常量、函数和类echo PATH;/∥/message_b oard echo getCommentTotal0;//300$comment=new Comment0;∥调用Article空间的常 量、 函数和类echo \Article\PATH;///article echo \Article\getCommentTotal0;//100 $article_ comment = new VArticle\Comment0; ?>
然后我的确得到了Article空间的元素数据。子空间
命名空间的调用语法像文件路径一样是有道理的,它允许我们自定义子空间来描述各个空间之间
的关系。抱歉我忘了说,article和message board这两个模块其实都是处于同一个blog项目内。如
果用命名空间来表达它们的关系,是这样:复制代码代码如下:<?php //我用这样的命名空间表示处于blog 下的article模块 namespace Blog\Article;class Commen t{ //我用这样的命名空间表示处于blog下的message board模块namespace Blog\MessageBoa rd;class Comment{}//调用当前空间的类 $comment = new CommentO;//调用Blog Article空间的类 $article comment = new \Blog\Article\Comment0; ?>
而且,子空间还可以定义很多层次,比如说Blog\Article\Archives\Date
公共空间
我有一个common_inc.php脚本文件,里面有一些好用的函数和类:复制代码代码如下:<?php function getIP0 {} class FilterXSS {}?>
在一个命名空间里引入这个脚本,脚本里的元素不会归属到这个命名空间。如果这个脚本里没有
定义其它命名空间,它的元素就始终处于公共空间中:复制代码代码如下:<?php namespace Blog\Article;//弓|入脚本文件 include'!./common_inc.php';$filter_XSS=new FilterXSS0;/∥出现致命错误: 找不到Blog\A rticle\FilterXSS类$filter XSS=new\FilterXSSO;//正确?>
调用公共空间的方式是直接在元素名称前加\就可以了,否则PHP解析器会认为我想调用当前空
间下的元素。除了自定义的元素,还包括PHP自带的元素,都属于公共空间。
要提一下,其实公共空间的函数和常量不用加\也可以正常调用(不明白PHP为什么要这样
做),但是为了正确区分元素,还是建议调用函数的时候加上
名称术语
在说别名和导入之前,需要知道关于空间三种名称的术语,以及PHP是怎样解析它们的。官方文

档说得非常好,我就直接拿来套了。
1.非限定名称,或不包含前缀的类名称,例如KaTeX parse error: Undefined control sequence: \Article at position 37: …。如果当前命名 空间是Blog\̲A̲r̲t̲i̲c̲l̲e̲,Comment将被解析为Bl…comment=new Article\Comment0;。如果当前的命
名空间是Blog,则Comment会被解析为Blog\Article\Comment。如果使用Comment的代码不包
含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。
3.完全限定名称,或包含了全局前缀操作符的名称,例如KaTeX parse error: Undefined control sequence: \Article at position 12: comment=new\̲A̲r̲t̲i̲c̲l̲e̲\Commen tO;。在这种…blog_comment=new CommentO;//限定名称,表示相对
于Blog空间
//这个调用将被解析成 Blog\Article\CommentO;KaTeX parse error: Undefined control sequence: \Commen at position 30: …t = new Article\̲C̲o̲m̲m̲e̲n̲ ̲t0;∥类前面没有反斜杆\∥完…article_comment =new\Blog\Comment0;/∥类前面有反斜杆/∥完全限定名称,表示绝
对于Blog空间
//这个调用将被解析成 Blog\Article\Comment(O;KaTeX parse error: Undefined control sequence: \Blog at position 23: …_comment = new \̲B̲l̲o̲g̲\Article\Co mme…article_comment = new Article\CommentO;/∥
为命名空间使用别名 use Blog\Article as Arte;//使用别名代替空间名
KaTeX parse error: Undefined control sequence: \Comment at position 27: …ment = new Arte\̲C̲o̲m̲m̲e̲n̲t̲/0;//导入一个类 use …article comment = new
Comment0;//为类使用别名
use Blog\Article\Comment as Comt;∥使用别名代替空间名
KaTeX parse error: Undefined control sequence: \Article at position 112: … namespace Blog\̲A̲r̲t̲i̲c̲l̲e̲; class Comment…article_comment= new Comment/O;/∥与当前空间的Comme
nt发生冲突,程序产生致命错误∥为类使用别名
use Blog\Article\ Comment as Comt;$article_comment = new Comt0;//与当前空间的Co
mt发生冲突,程序产生致命错误?>动态调用
PHP提供了namespace关键字和_NAMESPACE_魔法常量动态的访问元素,NAMESPACE
可以通过组合字符串的形式来动态访问:复制代码代码如下:<?php namespace Blog\Article; const PATH = '/Blog/article'; class Co mment {} //namespace关键字表示当前空间echo namespace\PATH;///Blog/article $comment = ne w namespace\CommentO;//魔法常量_NAMESPACE_的值是当前空间名称 echo __NAMESPAC E_;//Blog\Article //可以组合成字符串并调用 $comment_class_name = __NAMESPACE__. "\Comment'; $comment = new $comment_c lass_name0;?>
字符串形式调用问题
上面的动态调用的例子中,我们看到了字符串形式的动态调用方式,如果要使用这种方式要注意
两个问题。
1.使用双引号的时候特殊字符可能被转义复制代码代码如下:<?php namespace Blog\Article;class name{}//我是想调用Blog\Article\name $class_name =__ NAMESPACE_."\name";/∥但是\n将被转义为换行符 $name = new $class_nameO;//发生致命 错误?> 2.不会认为是限定名称 PHP在编译脚本的时候就确定了元素所在的空间,以及导入的情况。而在解析脚本时字符串形式 调用只能认为是非限定名称和完全限定名称,而永远不可能是限定名称。复制代码代码如下:<?php namespace Blog;//导入Common类 use Blog\Article\Common;//我想使用非限定名称调用Blog\Article\Common $common cla ss_name='Common';/∥实际会被当作非限定名称,也就表示当前空间的Common类,但我当前类 没有创建Common类$common=new $common class name0;//发生致命错误:Common类 不存在//我想使用限定名称调用Blog\Article\Common $common class name='Article\Comm on';/∥实际会被当作完全限定名称,也就表示Article空间下的Common类,但我下面只定义了Blog \Article空间而不是Article空间 $common=new $common class name(0;//发生致命错误:Article\Common类不存在 namespace Blog\Article;class Common {}?>总结
我对PHP的命名空间刚刚接触,也不能随便给一些没有实践的建议。我个人认为命名空间的作用
和功能都很强大,如果要写插件或者通用库的时候再也不用担心重名问题。不过如果项目进行到一定
程度,要通过增加命名空间去解决重名问题,我觉得工作量不会比重构名字少。也不得不承认它的语
法会对项目增加一定的复杂度,因此从项目一开始的时候就应该很好的规划它,并制定一个命名规
范。文章来源地址https://www.toymoban.com/news/detail-445954.html

到了这里,关于VS解决方案、命名空间和项目的关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VS010问题汇总(未能正确加载包)( 运行时提示无法启动程序 系统找不到指定的文件问题)(不能自动生成)(vs2010缺少或未指定语言特性)(没有为此解决方案配置选中要生成的项目)

    解决方法:http://t.csdn.cn/BKFoY(参考解决方法)  我的这个问题是参考这个回答中的第二个方法解决的,真的很靠谱,博主昨天被这个问题,重装了VS2010很多次,结果无法解决,是看了文中的方法才得以解决的 解决方法:我的解决方法:是没有生成解决方案,所以需要自己先

    2024年02月04日
    浏览(53)
  • vs2022 命名空间“System”中不存在类型或命名空间名“Printing”

    在监控打印机状态的时候,需要用到System.Printing。 System.Printing 命名空间 | Microsoft Learn 在微软官网有这个命名空间,其中提到 不支持命名空间中的System.Printing类在Windows服务或 ASP.NET 应用程序或服务中使用。 尝试从其中一种应用程序类型内使用这些类可能会导致意外问题,例

    2024年02月05日
    浏览(36)
  • VS2022 整个解决方案 快速查找失效--解决办法

    VS2022 整个解决方案 快速查找失效–解决办法(其它VS版本可能也一样,但未亲测) 最近在使用Vs2022的过程中,发现了使用\\\"快速查找(Ctrl+F)\\\"整个解决方案时,内容搜索不出来的问题 解决方案见下: 删除“ C:Program FilesMicrosoft Visual Studio2022[Enterprise/Pro/Community]Common7IDECommonExte

    2023年04月08日
    浏览(43)
  • VS2022 全局查找 整个解决方案失效

    问题现象: 在VS2022中 Ctrl+F 整个解决方案中无法查找到,但是在当前文档可以查找到。VS2015 VS2017 VS2019均可以全局查找到。 解决方案: 网上查询过程中尝试了3种方案: 重启 VS2022、重启Windows ; 删除解决方案所在文件目录的 .vs 文件夹; 删除 \\\"【VS2022安装目录】C

    2024年02月11日
    浏览(44)
  • vs code调试rust乱码问题解决方案

    在terminal中 用chcp 65001 修改一下字符集,就行了。有的博主推荐 修改 区域中的设置,这会引来很大的问题。千万不要修改如下设置:

    2024年02月09日
    浏览(40)
  • Oracle查看表空间使用率及爆满解决方案

    Oracle查看表空间使用率及爆满解决方案 一、查看表空间使用率 二、扩展大小或增加表空间文件 1.查看数据库表空间文件: 2.查看所有表空间的总容量: 3.查看数据库表空间使用率 4.1.查看表空间总大小、使用率、剩余空间 4.2.查看表空间使用率(包含temp临时表空间) 5.查看具体表

    2024年02月10日
    浏览(57)
  • 【DBA笔记3】Oracle之表空间使用率满及空间不足解决方案(上)

    目录 问题背景: 问题描述: 解决方案: 操作步骤: 一、查询对应表空间使用情况 二、修改对应表空间  有项目上出现前台业务功能报错,怀疑是数据库GS表空间满 ORA-01653:unable to extend table GSP### by 7 in tablespace GS 错误的具体内容如下: ORA-01653: unable to extend table GSP###  by 7 

    2023年04月21日
    浏览(39)
  • VS2013+QT5.5 中文乱码问题 解决方案

    最近使用VS2013+QT5.5 创建了一个项目,它的菜单是由代码创建的、   发现运行之后全部是乱码

    2024年02月13日
    浏览(43)
  • VMware 虚拟机占用磁盘空间过大的一种解决方案

    在使用VMware虚拟机的过程中,VM会自动扩大虚拟磁盘的占用空间。发现无论是VM自带的碎片整理还是压缩,这两个操作都无法明显减少虚拟机占用空间。 现在找到一种方法可以做到这点( 可能只适用于VM workstation pro,并未测试过普通版本 ),下面是方法的整理 1.正常关闭虚拟

    2024年02月13日
    浏览(82)
  • bug复刻,解决方案---在改变div层级关系时,导致传参失败

    在优化页面时,为了实现网页顶部遮挡效果(内容滚动,顶部导航栏不随着一起滚动,并且覆盖),做法是将内容都放在一个div里面,为这个新的div设置样式,margin-top width heigh等,网页效果的确实现了,但是出现的新的问题,传参失败,点击按钮跳转之后,在页面是更新的数

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包