文档库 最新最全的文档下载
当前位置:文档库 › PHP的命名空间

PHP的命名空间

PHP的命名空间
PHP的命名空间

PHP的命名空间

命名变量,函数和类是挺困难的,除了要考虑到变量的名称要易于理解,还要担心是否这个名称在其它某个地方已经使用过. 在一小段脚本中,第二个问题是基本问题. 当你考虑重用你的代码, 在这之后的项目代码必须避免使用你用过的命名. 通常来说,可重用的代码总是包含在函数或类中, 需要处理许多可能发生的命名冲突. 但函数和类之间也可能发生命名冲突. 你可以尝试避免出现这种情况,通过在所有类前添加前缀的方法,或者你可以使用namespace语句.

AD:

命名变量,函数和类是挺困难的,除了要考虑到变量的名称要易于理解,还要担心是否这个名称在其它某个地方已经使用过. 在一小段脚本中,第二个问题是基本问题. 当你考虑重用你的代码, 在这之后的项目代码必须避免使用你用过的命名. 通常来说,可重用的代码总是包含在函数或类中, 需要处理许多可能发生的命名冲突. 但函数和类之间也可能发生命名冲突. 你可以尝试避免出现这种情况,通过在所有类前添加前缀的方法,或者你可以使用namespace语句. Namespace关键字给一块代码命名. 在这个代码块外部,脚本必须用操作符::加上命名空间的名称来引用这个代码块. 引用静态的类成员也是用台湾高山茶 https://www.wendangku.net/doc/d010337693.html,相同的方法. 在命名空间内代码不需要声明命名空间, 它本身就是默认的. 这种方法比添加前缀的方法好. 你的代码可由此变得更加紧凑和可读.

你可能想知道是否可以建立分层的(嵌套的)命名空间. 答案是不可以. 但你可以在命名空间名称后加上冒号, 你可以再次调用在名称中不包含冒号的变量,函数和类. 命名空间允许存在冒号,只要不是第一个字符和最后一个字符或接着另一个冒号. 命名空间的名称中的冒号对于PHP来说没有任何意义, 但如果你用他们来区分逻水草玛瑙 https://www.wendangku.net/doc/d010337693.html,辑上的区块, 他们可以很好地说明你的代码中的父子(parent-child)关系.

注: 即可以使用这样:

用冒号来说明parent-child关系。

你可能在一个命名空间语句内没有包含函数,类或常量定义以外的任何东西. 这将阻止你使用他们来改进旧的使用全局变量的函数库. 命名空间最适合于面向对象. 命名空间内的常量与类中的常量使用相同的语法.

例子1显示了如何使用命名空间.

Using a namespace

$e = new core_php:utility::textEngine;

print($e- uppercase("from object") . "");

test function in namespace 测试命名空间中的函数

print(core_php:utility::uppercase("from function") . "");

bring class into global namespace 把类导入全局命名空间

import class textEngine from core_php:utility;

$e2 = new textEngine;

例子1

Import语句把命名空间中的某个部份导入全局的命名空间.

要导入单一的命名空间的成员,可以指定类型为constant,function或class,接着写上成员的名称; 如import class XXX

如果你想导入某一特定类型的所有成员,你可以用*来代替名称;

如import constant * 导入所有常量

如果你想导入所有类型的所有成员,用*即可.

如import *

在成员之后,用from关键字加上命名空间的名称.

如import class textEngine from core_php:utility;

总之你要写成像import * from myNamespace或import class textEngine from core_php:utility这样的语句,就像例图1中那样.

【编辑推荐】

如何在PHP中定义一个类

PHP函数使用入门

一些使用频率比较高的PHP函数

【责任编辑:李明源TEL:(010)68476606】

Linux安全体系分析与编程

本书选择经典的开放源代码,全面系统地分析了Linux安全机制。本书共有17章,前10章着重介绍了Linux操作系统的安全机制及实现方法

C#程序设计教程期末复习题及答案

习题 1 一、选择题 1.在C#中 B 都是对象。 A 任何类型 B 任何事物 C 任何代码 D 任何技术 2.对象包含数据和 A 的方法。 A 在该数据上工作 B 调用 C 函数调用 D 传递参数3.一个类是 D 的蓝本。 A 数据集合 B 函数集合 C 方法集合 D 给定功能集合4..NET构架包含公用语言运行时期和 B 。 5..NET的核心是 A 。 A CLR B Windows2000 C DNA D 分解平台 6.C#程序以 B 扩展名保存编写的程序。 A .CS B .PS C .CSS D .SC 7.System是 B 的命名空间。 A 存储系统类 B 控制台类 C I/O操作 D 新项目8.namespace用于声明 B 。 A 新项目 B 一个命名空间 C 类与方法 D 指令 9.每个C#程序必须有一个 D 方法。 A 类方法 B 构造方法 C Main D 重载方法 二、问答题 1.面向对象编程的三大原则是什么? 答:封装、继承和多态性。 2.封装是什么? 答:封装是用于隐藏对象实际的制作细节。 3.继承是什么? 答:继承是在建立新的特定对象时,可以使用现有对象的功能性。 4.多态性是什么? 答:多态性是程序代码能够依据实际对象所需而进行不同的行为。 https://www.wendangku.net/doc/d010337693.html,的核心构件包括哪些?

答:(1).NET构造块服务或有计划的访问某些服务。 (2)将在新的Internet设备上运行的.NET设备软件。 (3).NET用户经验。 6.CLR的作用是什么? 答:CLR是.NET的核心,它是一个运行时期环境,在该环境中,以不同语言编写的应用程序均能始终运行。 三、编程题 使用.NET代码编辑器编写一个C#应用程序,以在屏幕打印出: C# is the Component-oriented language in C and C++ family of language. 要求: (1)使用using System命名空间,即定位System命名空间的Console类。 (2)不使用using System命名空间,即System命名空间的Console类。 (3)使用using指令的别名,即使用using创建using的别名。 答案: (1) //Example1.cs Using System; Class Example1 { Public static void Main() { Console.Write(“C# is the Component-oriented language ”); Console.WriteLine(“in C and C++ family of language.”); } } (2) //Example2.cs Class Example1 {

C++命名空间

C++命名空间namespace 虽然使用命名空间的方法,有多种可供选择。但是不能贪图方便,一味使用using 指令,这样就完全背离了设计命名空间的初衷,也失去了命名空间应该具有的防止名称冲突的功能。 一般情况下,对偶尔使用的命名空间成员,应该使用命名空间的作用域解析运算符来直接给名称定位。而对一个大命名空间中的经常要使用的少数几个成员,提倡使用using声明,而不应该使用using编译指令。只有需要反复使用同一个命名空间的许多数成员时,使用using编译指令,才被认为是可取的。 例如,如果一个程序(如上面的outi.cpp)只使用一两次cout,而且也不使用std命名空间中的其他成员,则可以使用命名空间的作用域解析运算符来直接定位。如: #include …… std::cout << "Hello, World!" << std::endl; std::cout << "Outer::i = " << Outer::i << ", Inner::i = " << Outer::Inner::i << std::endl; 又例如,如果一个程序要反复使用std命名空间中的cin、cout 和cerr(如上面的outi.cpp),而不怎么使用其他std命名空间中的其他成员,则应该使用using 声明而不是using指令。如:

#include …… using std::cout; cout << "Hello, World!" << endl; cout << "Outer::i = " << Outer::i << ", Inner::i = " << Outer::Inner::i << endl; 4)命名空间的名称 l 命名空间别名 标准C++引入命名空间,主要是为了避免成员的名称冲突。若果用户都给自己的命名空间取简短的名称,那么这些(往往同是全局级的)命名空间本身,也可能发生名称冲突。如果为了避免冲突,而为命名空间取很长的名称,则使用起来就会不方便。这是一个典型的两难问题。 标准C++为此提供了一种解决方案——命名空间别名,格式为:namespace 别名= 命名空间名; 例如:(AT&T美国电话电报公司) namespace American_Telephone_and_Telegraph { // 命名空间名太长

https://www.wendangku.net/doc/d010337693.html,中命名空间Namespace浅析和使用例子

关于Namespace(命名空间)的使用,我常用 复制代码代码如下:< % @ Import Namespace="System.Data" %> ,这是在引用为我们提供的Namespace,这和ASP不同的,我们在https://www.wendangku.net/doc/d010337693.html,必须先引用与我们操作有关的Namespace后才能使用相应的功能。其实说白了,一个Namespace; 就是一个组件。 这个是关于https://www.wendangku.net/doc/d010337693.html,的高级应用。 我下面简单的列举一些常用的Namespace 代码如下: < % @ Import Namespace="System.Data" %> 处理数据时用到 < % @ Import Namespace="System.Data.ADO" % > 使用https://www.wendangku.net/doc/d010337693.html, ; 时用到 < % @ Import Namespace="System.Data.SQL" %> SQL Server 数据库专用 < % @ Import Namespace="System.Data.XML" %> 不用看处理XML用到 < % @ Import Namespace="System.IO" %> 处理文件时用到 < % @ Import Namespace="System.Web.Util" %> 发邮件时大家会用到 < % @ Import Namespace="System.Text" %> 文本编码时用到 操作数据库需要的东东 讲解了Namespace,我们可以正式来讨论数据库的应用了。 从上面的可以看出,我们操作数据库,我们需要引用下面两个Namespace 代码如下: < % @ Import Namespace="System.Data" %> < % @ Import Namespace="System.Data.SQL" %> 其实System.Data.SQL 可以用System.Data.ADO来代替,SQL是SQL Server专用,ADO 可以支持任何数据库(只要在主机上存在相应的驱动就行了,如Access,Mysql,Oracle之类的)。 无论是ADO还是SQL ,他们都有几个基本的对象用于操作 代码如下: Connections 连结到一个数据库,以便于后面的应用(类似ADO中的Connections) Commands 执行SQL语句的地方 DataReader 读取执行后返回的数据内容 DataSet 储存数据,功能强大,我们会具体讲解 DataSetCommand 执行SQL语句,并把数据存入DataSet 这里面可能最难理解的就是DataSet,我们先不去管他。 Connections(SQLConection 或者ADOConnection) 它的主要任务就是建立一个与数据库服务器的连接 代码如下: < % @ Page Language="C#" %> < % @ Import Namespace="System.Data" %> < % @ Import Namespace="System.Data.SQL" %> <script Language= "C#" Runat= "Server"> public void Page_Load(Object src,EventArgs e) { stringstrProvider="server=localhost;uid=sa;pwd=;database=aspcn";

C++标准库和std命名空间

c++标准库及命名空间std 1、命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突。最典型的例子就是std命名空间,C++标准库中所有标识符都包含在该命名空间中。 如果确信在程序中引用某个或者某些程序库不会引起命名冲突(即库中的标识符不会在程序中代表其他函数名称),那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std;那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。 是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样才能正确使用cout。、 C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择: 1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::hex<< 3.4<< std::endl; 2、使用using关键字。 using std::cout; using std::endl; 以上程序可以写成 cout << std::hex<< 3.4<< endl; 3、最方便的就是使用using namespace std; 例如: #include #include #include

C++命名空间解析

很多初学C++的人,对于C++中的一些基本的但又不常用的概念感到模糊,命名空间(name space)就是这样一个概念C++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量string user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决C++中的变量、函数的命名冲突而服务的。解决的办法就是将你的strTemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。例如: #include #include usingnamespace std; //using namespace编译指示,使在C++标准类库中定义的名字在本程序中可以使用 //否则,iostream,string 等c++标准类就不可见了,编译就会出错。 //两个在不同命名空间中定义的名字相同的变量 namespace myown1{ string user_name="myown1"; } namespace myown2{ string user_name="myown2"; } int main() { cout<<"" <<"Hello," <

C++-命名空间namespace

C++命名空间namespace 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。 MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名空间。 1)作用域与命名空间 与命名空间相关的概念有: 声明域(declaration region)——声明标识符的区域。如在函数外面声明的全局变量,它的声明域为声明所在的文件。在函数内声明的局部变量,它的声明域为声明所在的代码块(例如整个函数体或整个复合语句)。 潜在作用域(potential scope)——从声明点开始,到声明域的末尾的区域。因为C++采用的是先声明后使用的原则,所以在声明点之前的声明域中,标识符是不能用的。即,标识符的潜在作用域,一般会小于其声明域。 作用域(scope)——标识符对程序可见的范围。标识符在其潜在作用域内,并非在任何地方都是可见的。例如,局部变量可以屏蔽全局变量、嵌套层次中的内层变量可以屏蔽外层变量,从而被屏蔽的全局或外层变量在其倍屏蔽的区域内是不可见的。所以,一个标识符的作用域可能小于其潜在作用域。 命名空间 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个集团的声明放在同一个命名空间中。 原来C++标识符的作用域分成三级:代码块({……},如复合语句和函数体)、类和全局。现在,在其中的类和全局之间,标准C++又添加了命名空间这一个作用域级别。 命名空间可以是全局的,也可以位于另一个命名空间之中,但是不能位于类和代码块中。所以,在命名空间中声明的名称(标识符),默认具有外部链接特性(除非它引用了常量)。 在所有命名空间之外,还存在一个全局命名空间,它对应于文件级的声明域。因此,在命名空间机制中,原来的全局变量,现在被认为位于全局命名空间中。

C++命名空间

基本技能 12.5:命名空间 我们曾经在第一章中对命名空间进行简单的介绍。这里我们将对命名空间进行深入的讨论。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突。在C++中,变量、函数和类都是大量存在的。如果没有命名空间,这些变量、函数、类的名称将都存在于全局命名空间中,会导致很多冲突。比如,如果我们在自己的程序中定义了一个函数toupper(),这将重写标准库中的toupper()函数,这是因为这两个函数都是位于全局命名空间中的。命名冲突还会发生在一个程序中使用两个或者更多的第三方库的情况中。此时,很有可能,其中一个库中的名称和另外一个库中的名称是相同的,这样就冲突了。这种情况会经常发生在类的名称上。比如,我们在自己的程序中定义了一个Stack类,而我们程序中使用的某个库中也可能定义了一个同名的类,此时名称就冲突了。 Namespace关键字的出现就是针对这种问题的。由于这种机制对于声明于其中的名称都进行了本地化,就使得相同的名称可以在不同的上下文中使用,而不会引起名称的冲突。或许命名空间最大的受益者就是C++中的标准库了。在命名空间出现之前,整个C++库都是定义在全局命名空间中的(这当然也是唯一的命名空间)。引入命名空间后,C++库就被定义到自己的名称空间中了,称之为std。这样就减少了名称冲突的可能性。我们也可以在自己的程序中创建自己的命名空间,这样可以对我们认为可能导致冲突的名称进行本地化。这点在我们创建类或者是函数库的时候是特别重要的。 命名空间基础 namespace关键字使得我们可以通过创建作用范围来对全局命名空间进行分隔。本质上来讲,一个命名空间就定义了一个范围。定义命名空间的基本形式如下: namespace 名称{//声明} 在命名空间中定义的任何东西都局限于该命名空间内。 下面就是一个命名空间的例子,其中对一个实现简单递减计数器的类进行了本地化。在该命名空间中定义了计数器类用来实现计数;其中的upperbound和lowerbound用来表示计数器的上界和下界。 //演示命名空间 namespace CounterNameSpace { int upperbound; int lowerbound; class counter { int count; public: counter(int n) { if ( n <= upperbound )

为什么需要命名空间

3:为什么需要命名空间 一、为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。 在C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量、函数和类等。 例:如果在文件中定义了两个类,在这两个类中可以有同名的函数。在引用时,为了区别,应该加上类名作为限定: class A //声明A类 { public: void funl();//声明A类中的funl函数 private: int i; }; void A::funl() //定义A类中的funl函数 {…………} class B //声明B类 { public: void funl(); //B类中也有funl函数 void fun2(); }; void B::funl() //定义B类中的funl函数 { …………} 这样不会发生混淆。 在文件中可以定义全局变量(global variable),它的作用域是整个程序。如果在文件A中定义了一个变量a int a=3; 在文件B中可以再定义一个变量a int a=5; 在分别对文件A和文件B进行编译时不会有问题。但是,如果一个程序包括文件A和文件B,那么在进行连接时,会报告出错,因为在同一个程序中有两个同名的变量,认为是对变量的重复定义。 可以通过extern声明同一程序中的两个文件中的同名变量是同一个变量。如果在文件B中有以下声明: extem int a; 表示文件B中的变量a是在其他文件中已定义的变量。由于有此声明,在程序编译和连接后,文件A的变量a的作用域扩展到了文件B。如果在文件B中不再对a赋值,则在文件B中用以下语句输出的是文件A中变量a的值: cout<

第11讲(多文件组织、命名空间、数组)

第11讲 教学内容 5.6 多文件结构和编译预处理命令 5.6.1c++程序的一般组织结构 5.6.3标准c++库和命名空间 5.6.4编译预处理 6.1 数组 6.1.1 数组的声明与使用 6.1.2 数组的存储与初始化 教学重点和难点 1了解多文件组织的使用方法及其作用 2命名空间的理解 3数组的作用、定义、数组元素的特点 教学方法: 通过以前的例题(类的组合),讲解多文件组织如何实现。 通过程序演示,讲解命名空间的理解,以及相应的头文件的使用方法。 通过程序演示,复习C语言中数组的概念和使用方法。 教学学时 2 学时

教学过程 一多文件组织: 一般一个类的声明单独为一个头文件(.h),类的实现单独为一个源文件(.cpp) 原则: 1每一类的定义写在一个类名.h中,每一个类的实现写在一个类名.cpp中包含main函数的那个.cpp单独写一个 2不管是在.h文件还是在.cpp文件中用到了哪些头文件的信息,都要用#include 包含 3 为了防止重复包含,在每个头文件中都加上条件编译 例如:求一个线段的长度 //line.h #ifndef LINE_H //不添加上条件编译,就会出现类Line重复定义的编译错误 #define LINE_H #include "Point.h" class Line { private: Point p1,p2;

double len; public: Line(Point p11,Point p22); double GetLen(); }; #endi //Point.h #ifndef Point_H #define Point_H class Point { private: int x; int y; public: Point(int xx = 0,int yy = 0); void setX(int xx); void setY(int yy); int GetX() const; int GetY() const ; void printXY() const; void printXY() ; }; #endif //Line.cpp #include #include "Line.h" #include "point.h"

Python命名空间和作用域窥探

Namespace and Scope(命名空间和作用域) namespace Namespace(只)是从名字到对象的一个映射(a mapping from name to objects)。大部分namespace都是按Python中的字典来实现的。有一些常见的namespace:built-in中的集合(abs()函数等)、一个模块中的全局变量等。 从某种意义上来说,一个对象(object)的所有属性(attribute)也构成了一个namespace。在程序执行期间,可能(其实是肯定)会有多个名空间同时存在。不 同namespace的创建/销毁时间也不同。 此外,两个不同namespace中的两个相同名字的变量之间没有任何联系。scope 有了namespace基础之后,让我们再来看看scope。Scope是Python程序的一 块文本区域(textual region)。 在该文本区域中,对namespace是可以直接访问,而不需要通过属性来访问。Scope是定义程序该如何搜索确切地“名字-对象”的名空间的层级关系。 (The “scope”in Python defines the “hirerchy level”in which we search namespaces for certain “name-to-object”mappings.)

Tip 直接访问:对一个变量名的引用会在所有namespace中查找该变量,而不是通过属性访问。 属性访问:所有名字后加.的都认为是属性访问。 如module_name.func_name,需要指定func_name的名空间,属于属性访问。 而abs(-1),abs属于直接访问。 两者之间有什么联系呢? Important 在Python中,scope是由namespace按特定的层级结构组合起来的。scope一定是namespace,但namespace不一定是scope. LEGB-rule 在一个Python程序运行中,至少有4个scopes是存在的。 直接访问一个变量可能在这四个namespace中逐一搜索。 ?Local(innermost) 包含局部变量。 比如一个函数/方法内部。 ?Enclosing

命名空间

本讲基本要求 * 掌握:命名空间的作用及定义;如何使用命名空间。 * 了解:使用早期的函数库 重点、难点 ◆命名空间的作用及定义;如何使用命名空间。 在学习本书前面各章时,读者已经多次看到在程序中用了以下语句: using namespace std; 这就是使用了命名空间std。在本讲中将对它作较详细的介绍。 一、为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。在C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量、函数和类等。 例:如果在文件中定义了两个类,在这两个类中可以有同名的函数。在引用时,为了区别,应该加上类名作为限定: class A //声明A类 { public: void funl();//声明A类中的funl函数 private: int i;}; void A::funl() //定义A类中的funl函数 {…………} class B //声明B类 { public: void funl();//B类中也有funl函数 void fun2();}; void B::funl() //定义B类中的funl函数 { …………} 这样不会发生混淆。 在文件中可以定义全局变量(global variable),它的作用域是整个程序。如果在文件A中定义了一个变量a int a=3; 在文件B中可以再定义一个变量a int a=5; 在分别对文件A和文件B进行编译时不会有问题。但是,如果一个程序包括文件A和文件B,那么在进行连接时,会报告出错,因为在同一个程序中有两个同名的变量,认为是对变量的重复定义。 可以通过extern声明同一程序中的两个文件中的同名变量是同一个变量。如果在文件B 中有以下声明: extem int a; 表示文件B中的变量a是在其他文件中已定义的变量。由于有此声明,在程序编译和连接后,文件A的变量a的作用域扩展到了文件B。如果在文件B中不再对a赋值,则在文件B

Spring Bean的5种作用域

Spring Bean的5种作用域 singleton作用域: Spring的scope的默认值是singleton Spring 只会为每一个bean创建一个实例,并保持bean的引用. Spring1以上提供 prototype作用域: 每一次请求(将其注入到另一个bean中,或执行getBean()方法)都会产生一个新的bean实例,相当于new操作. Spring一旦将Bean实例交给(注入)调用者,就不再持有这个bean的引用。就无法再执行bean定义的destroy-method. 清除prototype作用域的bean对象并释放资源,是调用者的职责。 Spring1以上提供 request作用域: 表示该针对每一次HTTP请求都会产生一个新的bean,仅适用于WebApplicationContext环境。 Spring1以上提供 session作用域: 表示该针对每一次HTTP请求都会产生一个新的bean,仅适用于WebApplicationContext环境。 Spring1以上提供 globalSession作用域: 它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet 所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么,web会自动当成session类型来使用。 Spring1以上提供

C++中using_namespace_std详解

std是一个命名空间 C++中引入命名空间的主要是为了处理程序中常见的命名冲突,它是由ANSI C++引入的可以由用户命名的作用域。所谓命名空间,实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其它全局实体分隔开来。如: namespace ns //指定命名空间ns { int a; double b; } namespace是定义命名空间所必须写的关键字,ns是用户自己指定的命名空间的名字(可以用任意的合法标识符),在花括号内是声明块,在其中声明的实体称为命名空间成员(namespace member)。现在命名空间成员包括变量a和b,注意a和b仍然是全局变量,仅仅是把他们隐藏在指定的命名空间中而已。如果在程序中要使用变量a和b,必须加上命名空间名和作用域分辨符“::”,如ns::a,ns::b。这种用法称为命名空间限定,这些名字(如ns::a)称为被限定名。 C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是设立若干子目录,把文件放到不同的子目录中,不同子目录中的文件可以同名,而调用文件时应指出文件路径。 命名空间的作用是建立一些相互分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。 可以根据需要设置多个命名空间,每个命名空间名代表一个不同的命名空间域,不同的命名空间不能同名。这样可以把不同的库中的实体放到不同的命名空间中,或者说,用不同的命名空间把不同的实体隐蔽起来。过去我们用的全局变量可以理解为全局命名空间,独立于所有有名的命名空间之外,它是不需要用namespace声明的,实际上是由系统隐式声明的,存在于每个程序中。 声明一个命名空间时,花括号内不仅可以包括变量,而且还可以包括一下类型: 变量(可以带有初始化) 常量 函数(可以是定义或声明) 结构体 类 模板 命名空间(在一个命名空间中又定义一个命名空间,即嵌套的命名空间) 例如:

C++命名空间

C++ using namespace std 详解 所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一: 是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用nam espacestd;这样才能正确使用cout。 二: 所谓namespace,是指标识符的各种可见范围。 C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择: 1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::hex<< 3.4<< std::endl; 2、使用using关键字。 using std::cout; using std::endl; 以上程序可以写成 cout << std::hex<< 3.4<< endl; 3、最方便的就是使用using namespace std; 例如: #include #include #include using namespace std; 这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写: cout << hex<< 3.4<< endl;

JSP XML命名空间

JSP XML命名空间 由于XML允许自定义标记,因此XML文件中就有可能出现重名标记。如果需要区分这些标记,那么使用命名空间就可以区分重名标记。命名空间的目的是有效地区分名字相同的标记。在本节将介绍命名空间的有关知识。 1.命名空间概念 XML命名空间用来解决XML元素的名称冲突和多义性的问题。W3C组织的推荐书对“XML命名空间”(1999年1月14日)的解释:一个XML命名空间是一个命名的汇集,它由URI(统一资源标识符)确定,在XML文件中作为元素类型和属性名使用。 XML命名空间表示XML名称的使用范围。因为XML可自定义元素标签,所以在同一XML应用中,XML元素很有可能出现重名元素。如果没有一种方法来区分这些同名元素,那么就会给应用带来不可避免的麻烦。XML命名空间正是为了解决元素重名问题。 命名空间是XML文档的基本成分,是确保元素惟一性的限定名称。例如,可以将一个班的学生姓名作为一个命名空间,也可以把一组学生的姓名作为一个命名空间。命名空间就是在逻辑上相关的任何一组名称,而且在同一命名空间中的元素名称必须具有惟一性。通过XML命名空间,可以区分来自不同的XML应用的具有相同名称的元素和属性。 2.创建命名空间 命名空间是通过使用一系列保留属性进行声明。这一系列保留属性的名称必须是xmlns或以“xmlns:”作为前缀。与其它任何XML属性一样,这些属性可以直接或缺省方式给定。声明命名空间的基本语法如下所示: xmlns是定义命名空间的关键字,用来声明命名空间。prefix是命名空间前缀属性名称,定义命名空间前缀名称必须遵守下面两条基本规则: ●名称必须由字母、数字、下划线、点号、连字符组成。 ●名称首字母必须是字母或下划线。 属性值是一个URI引用,是识别该命名空间的命名空间名字。为了满足预期的用途,命名空间的名字应该有具有惟一性和持久性。

c#复习资料

1.面向对象编程(oop)的三个特性:封装,继承,多态 2.C#程序的入口方法名:Main 3.小数类型(decimal)比浮点数类型精度高 4.默认情况下,基础类型为int,第一个枚举数的值为0,后面每个枚举型的值依次递增1. 5.Continue不是用来终止并跳出循环结构的,而是忽略continue后面的语句,直接进入本循环结构的下一次循环操作。 6.定义初始化一维数组:int[] a = new int[] { 1, 2, 3, 4, 5 }; 7.定义初始化一个2行3列的二维数组:int[,] a = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } }; 8. int[][] myArray = new int[3][] { new int[3] { 1, 2, 3 }, new int[5] { 4, 5, 6, 7, 8 }, new int[2] { 9, 10 } };则myArray[1][1]的值是5。数组从a[0][0]开始的。 9.int占四个字节。 10. double[, ,] a = new double[2, 3, 4];是一个三维数组,元素有2*3*4=24个 11.在.Net中一些数据类型为引用类型,当引用类型的值为null时,表明没有引用任何对象。 12.C#的数据类型有值类型和引用类型。值类型包括:基本值类型(int,bool,char,float,double,decimal),结构类型(struct),枚举类型(enum),引用类型包括:数组,字符串(string),类(class),接口,委托。对于方法,按性质参数传递分为按值类型和按引用类型传递。 13.数据改变只是临时转变,不改变数据说明时对该变量定义的类型。数据转换的类:convert 14.装箱:值类型到引用类型,拆箱:引用类型到值类型。 15.按值传参传的只是形参,按引用传参传的是实参。Ref修饰的参数在传参前要求先初始化实参,out修饰的参数,在传参前不需要赋初值,但在方法内部必须赋值后才可以使用,在方法结束前必须对该参数赋值。 16.方法的重载:允许用同一方法名定义多个方法,这些方法的参数个数或参数类型不同,不同的参数传递方式。 17.对类进行实例化时,系统自动调用构造函数,构造函数的名称必须和类名相同,不允许有返回值类型,包括void。一个类可以声明多个构造函数,构造函数在创建对象时调用。默认构造函数不包含任何参数和语句。销毁一个实例化对象时,系统会调用析构函数。 18.C#中,internal访问修饰符修饰的变量只能由当前程序集访问。 19.一个类中的私有实例方法的调用可以在同一个类中的某一个方法中直接调用。 20.C#中导入某一命名空间的关键字:using,命名空间使得代码更加有条理,结构更清晰。 21.在类作用域中能够通过直接使用该类的任何成员名进行访问。 22.静态成员关键字:static,在内存中只有一份,要等到引用程序结束时才会消失。静态成员属于类,而不属于类的实例,因此需要通过类,而不是通过类的实例来访问。 23.一个类可以实现多个接口,只能从一个基类派生,即类不可以多重继承而接口可以,子类能添加新方法。抽象类是一种不能实例化的类,抽象类可以包含抽象成员,也可以包含非抽象成员,可以封装所有派生类的通用功能。接口像是一个完全没有实现的只包含抽象成员的抽象类,无法使用接口来封装所有派生类的通用功能。 24. ClassA obj = new ClassA(); ClassA.M1(); 则修饰M1方法时一定使用了static修饰符。 25.已知类B是由类A继承而来,类A中有一个为M的非虚方法,现在希望在类B中也定义一个名为M的方法,若希望编译时不出现警告信息,则在类B中声明该方法时,应使用new方法。26.要在派生类中重新定义基类的虚函数必须在前面加override关键字。

C++标准库和std命名空间

C++ 是在C语言的基础上开发的,早期的C++ 还不完善,不支持命名空间,没有自己的编译器,而是将C++ 代码翻译成C代码,再通过C编译器完成编译。这个时候的C++ 仍然在使用C语言的库,stdio.h、stdlib.h、string.h 等头文件依然有效;此外C++ 也开发了一些新的库,增加了自己的头文件,例如: ?iostream.h:用于控制台输入输出头文件。 ?fstream.h:用于文件操作的头文件。 ?complex.h:用于复数计算的头文件。 围的。 后来C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个 空间”。 但是这时已经有很多用老式C++ 开发的程序了,它们的代码中并没有使用命名空间,直接修改原来的库会带来一个很严重的后果:程序员会因为不愿花费大量时间修改老式代码而极力反抗,拒绝使用新标准的C++ 代码。 C++ 开发人员想了一个好办法,保留原来的库和头文件,它们在C++ 中可以继续使用,然后再把原来的库复制一份,在此基础上稍加修改,把类、函数、宏等纳入命名空间std 下,

就成了新版C++ 标准库。这样共存在了两份功能相似的库,使用了老式C++ 的程序可以继续使用原来的库,新开发的程序可以使用新版的C++ 库。 需要注意的是,旧的C++ 头文件是官方所反对使用的,已明确提出不再支持,但旧的C 头文件仍然可以使用,以保持对C的兼容性。实际上,编译器开发商不会停止对客户现有软件提供支持,可以预计,旧的C++ 头文件在未来数年内还是会被支持。 下面是我总结的C++ 头文件的现状: 1) 旧的C++ 头文件,如iostream.h、fstream.h 等将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在命名空间std 中。 2) 新的C++ 头文件,如iostream、fstream 等包含的基本功能和对应的旧版头文件相似,但头文件的内容在命名空间std 中。 注意:在标准化的过程中,库中有些部分的细节被修改了,所以 旧的头文件和新的头文件不一定完全对应。 3) 标准C头文件如stdio.h、stdlib.h 等继续被支持。头文件的内容不在std 中。

相关文档