php 容易被面试官提到的知识点(面试题详细介绍)
担任一个抽象类的时辰,子类必需界说父类中的全部抽象要领;其它,这些要领的会见节制必需和父类中一样(可能更为宽松)。譬喻某个抽象要领被声明为受掩护的,那么子类中实现的要领就应该声明为受掩护的可能公有的,而不能界说为私有的。 子类要领可以包括父类抽象要领中不存在的可选参数。 抽象类和接口的观念要分清晰,轻易夹杂 定名空间的领略有深度,必要花点实力进修下 PHP 定名空间中的类名可以通过三种方法引用: 非限命名称,或不包括前缀的类名称,譬喻 $a=new foo(); 或 foo::staticmethod();。假如当前定名空间是 currentnamespace,foo 将被理会为 currentnamespacefoo。假如行使 foo 的代码是全局的,不包括在任何定名空间中的代码,则 foo 会被理会为foo。 告诫:假如定名空间中的函数或常量未界说,则该非限制的函数名称或常量名称会被理会为全局函数名称或常量名称。 限命名称,或包括前缀的名称,譬喻 $a = new subnamespacefoo(); 或 subnamespacefoo::staticmethod();。假如当前的定名空间是 currentnamespace,则 foo 会被理会为 currentnamespacesubnamespacefoo。假如行使 foo 的代码是全局的,不包括在任何定名空间中的代码,foo 会被理会为subnamespacefoo。 完全限命名称,或包括了全局前缀操纵符的名称,譬喻, $a = new currentnamespacefoo(); 或 currentnamespacefoo::staticmethod();。在这种环境下,foo 老是被理会为代码中的笔墨名(literal name)currentnamespacefoo。 注融会见恣意全局类、函数或常量,都可以行使完全限命名称,譬喻 strlen() 或 Exception 或 INI_ALL。 在定名空间内部会见全局类、函数和常量: namespace Foo; function strlen() {} const INI_ALL = 3; class Exception {} $a = strlen('hi'); // 挪用全局函数strlen $b = INI_ALL; // 会见全局常量 INI_ALL $c = new Exception('error'); // 实例化全局类 Exception ?> 要害字 namespace 可用来显式会见当前定名空间或子定名空间中的元素。它等价于类中的 self 操纵符。 namespace操纵符,定名空间中的代码 namespace MyProject; use blahblah as mine; // see "Using namespaces: importing/aliasing" blahmine(); // calls function blahblahmine() namespaceblahmine(); // calls function MyProjectblahmine() namespacefunc(); // calls function MyProjectfunc() namespacesubfunc(); // calls function MyProjectsubfunc() namespacecname::method(); // calls static method "method" of class MyProjectcname $a = new namespacesubcname(); // instantiates object of class MyProjectsubcname $b = namespaceCONSTANT; // assigns value of constant MyProjectCONSTANT to $b ?> 行使定名空间:别名/导入PHP 定名空间支持 有两种行使别名或导入方法:为类名称行使别名,或为定名空间名称行使别名。 在PHP中,别名是通过操纵符 use 来实现的. 下面是一个行使全部也许的三种导入方法的例子: 1、行使use操纵符导入/行使别名 namespace foo; use MyFullClassname as Another; // 下面的例子与 use MyFullNSname as NSname 沟通 use MyFullNSname; // 导入一个全局类 use ArrayObject; $obj = new namespaceAnother; // 实例化 fooAnother 工具 $obj = new Another; // 实例化 MyFullClassname工具 NSnamesubnsfunc(); // 挪用函数 MyFullNSnamesubnsfunc $a = new ArrayObject(array(1)); // 实例化 ArrayObject 工具 // 假如不行使 "use ArrayObject" ,则实例化一个 fooArrayObject 工具 ?> 导入操纵是在编译执行的,但动态的类名称、函数名称或常量名称则不是。 3、导入和动态名称 use MyFullClassname as Another,MyFullNSname; $obj = new Another; // 实例化一个 MyFullClassname 工具 $a = 'Another'; $obj = new $a; // 现实化一个 Another 工具 ?> 全局空间假如没有界说任何定名空间,全部的类与函数的界说都是在全局空间,与 PHP 引入定名空间观念前一样。在名称前加上前缀 暗示该名称是全局空间中的名称,纵然该名称位于其余的定名空间中时也是云云。 行使全局空间声名 namespace ABC; /* 这个函数是 ABCfopen */ function fopen() { /* ... */ $f = fopen(...); // 挪用全局的fopen函数 return $f; } ?> 名称理会遵循下列法则: 对完全限命名称的函数,类和常量的挪用在编译时理会。譬喻new AB理会为类AB。 全部的非限命名称和限命名称(非完全限命名称)按照当前的导入法则在编译时举办转换。譬喻,假如定名空间ABC被导入为C,那么对CDe()的挪用就会被转换为ABCDe()。 在定名空间内部,全部的没有按照导入法则转换的限命名称均会在其前面加被骗前的定名空间名称。譬喻,在定名空间AB内部挪用CDe(),则CDe()会被转换为ABCDe()。 非限制类名按照当前的导入法则在编译时转换(用全名取代短的导入名称)。譬喻,假如定名空间ABC导入为C,则new C()被转换为new ABC()。 在定名空间内部(譬喻AB),对非限命名称的函数挪用是在运行时理会的。譬喻对函数foo()的挪用是这样理会的: 在当前定名空间中查找名为ABfoo()的函数 实行查找并挪用全局(global)空间中的函数foo()。 在定名空间(譬喻AB)内部对非限命名称或限命名称类(非完全限命名称)的挪用是在运行时理会的。下面是挪用new C()及new DE()的理会进程:new C()的理会: 在当前定名空间中查找ABC类。 实行自动装载类ABC。 new DE()的理会: 在类名称前面加被骗前定名空间名称酿成:ABDE,然后查找该类。 实行自动装载类ABDE。 为了引用全局定名空间中的全局类,必需行使完全限命名称new C()。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |