PHP的 Final关键字、类(文件)的加载和命名空间

** Final、类(文件)的加载和命名空间

1、final 关键字-----终态的、最终的

final 关键字用于修饰类和方法;修饰的类不能被继承,修饰的函数方法(public)在子类中不能被重载。
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

类使用 final 关键字的例子:
final class Person{
......
}
final 定义的类被继承时会提示如下错误:
Fatal error: Class Student may not inherit from final class (Person) in ...
方法使用 final 关键字的例子:
class Person{
final function say(){
......
}
}

2、类的自动加载

PHP的类自动加载
__autoload:是直接写在类的方法里面。

PHP的类的自动加载存在的原因:

在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且require_once的代价很大。
PHP的类的自动加载的更新替换:
在PHP5后,当加载PHP类时,如果类所在文件没有被包含进来,或者类名出错,Zend引擎会自动调用__autoload函数。此函数需要用户自己实现__autoload函数。 在PHP5.1.2版本后,可以使用spl_autoload_register函数自定义自动加载处理函数。当没有调用此函数,默认情况下会使用SPL自定义的spl_autoload函数。
我们可以看出_autoload至少要做三件事情,第一件事是根据类名确定类文件名,第二件事是确定类文件所在的磁盘路径(在我们的例子是最简单的情况,类与调用它们的PHP程序文件在同一个文件夹下),第三件事是将类从磁盘文件中加载到系统中。第三步最简单,只需要使用include/require即可。要实现第一步,第二步的功能,必须在开发时约定类名与磁盘文件的映射方法,只有这样我们才能根据类名找到它对应的磁盘文件。

3、命名空间

从广义上来说,命名空间是一种封装事物的方法
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字。
**命名空间下的某个类可以写别名,目的是简化代码
命名空间的定义: 命名空间是一个容器,这个容器主要是为了识别其下的类和函数。一旦定义了命名空间,它下面的代码就属于这个命名空间了,所以命名空间的定义要在代码的最开始行。
对于同一个包来说,同一个命名空间或者子命名空间的代码没有必要在一个 PHP 文件中定义,子命名空间下的代码是为了完成特定模块的工作,组合起来就是一个包完整的命名空间。
假如编写的代码没有定义命名空间,那说明它属于全局的命名空间(\ 符号),所以能够直接引用类或者函数(不用添加 \ 符号)。

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 
1.  用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。  
2.  为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。  
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。
Note: 名为PHP或php的命名空间,以及以这些名字开头的命名空间(例如PHP\Classes)被保留用作语言内核使用,而不应该在用户空间的代码中使用。

举例:

时间: 2024-10-26 01:48:11

PHP的 Final关键字、类(文件)的加载和命名空间的相关文章

final,类的自动加载,命名空间

final是干什么的一般是为了防止父类的一个方法被重写如果父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. Note: 属性不能被定义为 final,只有类和方法才能被定义为 final. 类的自动加载类的自动加载是指,在外面的页面中,并不需要去"引入"类文件,但是程序会在需要的时候动态加载需要的类文件. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(in

PHP面向对象——Final关键字 类的自动加载

1.Final关键字 含义:最终的,最后的 作用: 1.如果父类中的方法被声明为 final,则子类无法覆盖该方法. 如果一个类被声明为 final,则不能被继承. 2.属性不能被定义为 final,只有类和方法才能被定义为 final. 用法:直接在类或者方法前加final关键字. --------------------------------------------------------------------------- 2.类的自动加载 含义: 1.解决代码重复,把重复的代码写在一

面向对象之final,类的自动加载,命名空间

Final关键字:最终的属性不能被定义为 final,只有类和方法才能被定义为 final.特点:Final类不能被继承: 如果我们不希望一个类被继承,我们使用final来修饰这个类.这个类将无法被继承.比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型.Final 方法不能被重写:如果不希望类中的某个方法被子类重写,我们可以设置这个方法为final方法,只需要在这个方法前加上final修饰符类的自动加载简化开发者书写文

final关键字,类的自动加载,命名空间

final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的方法进行重写. 扩展内容: 类的自动加载: 什么是类的自动加载? Spl_autoload_register():注册给定的函数作为__autoload()函数的实现 类的自动加载 在最开始使用的是__autoload()进行自动加载,但是在PHP5.3之前,__autoload函数抛出的异常不能被

java动态编译类文件并加载到内存中

如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考笔者的这篇博文-(该博文暂未发布) 所谓动态编译,就是在程序运行时产生java类,并编译成class文件. 一.这里介绍两种动态编译java文件的方式. 第一种:使用Runtime执行javac命令 /** * 编译java类 * 使用Runtime执行javac命令 * @param name 类的全限定包名 不带后缀 例如com.test.Notice 而不要写成com.

PHP的类文件自动加载机制

搜集于网络,学习php的类的自动加载机制,在实际大型项目中其重要性尤为突出. PHP的类自动加载机制 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来.这个在小规模开发的时候,没什么大问题.但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且require_once的代价很大. 在PHP5之前,各个PHP框架如果要实现类的自动加载,一般

浅析PHP类的自动加载和命名空间

php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码的维护相当的困难.实际的开发中我们会在文件的开始位置用use关键字使用类,然后直接new这个类就可以了. 至于类是怎么加载的,一般都是框架或者composer去实现的. <?php use Illuminate\Container\Container; $container = new Contai

__autoload() 类文件自动加载函数

这个魔术方法是用来自动加载程序所用到类文件的PHP源文件,这样就避免了我们一个一个自动去require或者include了,这个函数会在试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类,但是我最近看过一篇文章,上面说__autoload()的效率不是很高.以下是示例代码: 1 <?php 2 功能:在当前页使用类时自动加载该类的文件 3 参数$className 为类的名称 可自定义 4 5 */ 6 7 function __auto

Final关键字和类的自动加载

Final关键字: 父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. 一般是为了防止父类的一个方法被重写.只能用来定义类和定义方法, 不能使用final这个关键字来定义成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数,所以不能使用final来定义成员属性.1.被final修饰的类不可以被继承 2.被final修饰的方法不可以被重写 3.被final修饰的变量不可以被改变被final修饰不可变的是变量的引