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

1.Final关键字

含义:最终的,最后的

作用

1.如果父类中的方法被声明为 final,则子类无法覆盖该方法。

如果一个类被声明为 final,则不能被继承。

2.属性不能被定义为 final,只有类和方法才能被定义为 final。

用法:直接在类或者方法前加final关键字。

---------------------------------------------------------------------------

2.类的自动加载

含义:

1.解决代码重复,把重复的代码写在一个文件夹中,让其他PHP文件调用自动加载。

2.解决PHP文件过多 include等引入PHP过于庞大造成负担。

实现函数:

spl_autoload_register() 函数:可以注册任意数量的自动加载器。

__autoload():尝试加载未定义的类 也能自动加载类和接口(不推荐,可能被弃用)。(注意:处理大量程序时使程序变得臃肿,无法实现,代码变复杂,给未来的系统维护和系统效率带来很大的负面影响)

注意:自动加载不可用于 PHP 的 CLI 交互模式

php加载文件方式:
1、include,include_once,requice,requice_one常规加载
2、__autoload()
3、spl_autoload_register()

__autoload()自动加载

<?php 

function __autoload($class){ 

  $file = $class . ‘.php‘;//拼接路径 

  if (is_file($file)) { //判断$file是否存在

    require_once($file); //从$file路径导入一次

  

$a = new A();

注意:由于__autoload()是个函数,只能存在一次。

-----------------------------------------------------------------------------

spl_autoload_register()自动加载

spl_autoload_register()  它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。相比之下, __autoload() 只可以定义一次。

<?php 

function loader($class){ 

  $file = $class . ‘.php‘

  if (is_file($file)) { 

    require_once($file); 

  

spl_autoload_register(‘loader‘); 

$a = new A();

直接使用匿名函数:

<?php 

 

spl_autoload_register(function($file){

  $file = $class . ‘.php‘

  if (is_file($file)) { 

    require_once($file); 

  }

}); 

$a = new A();

这样子也是可以正常运行的,这时候php在寻找类的时候就没有调用__autoload而是调用我们自己定义的函数loader了。同样的道理,下面这种写法也是可以的:


1

2

3

4

5

6

7

8

9

10

11

12

13

<?php 

class Loader { 

  public static function loadClass($class){ 

    $file = $class . ‘.php‘

    if (is_file($file)) { 

      require_once($file); 

    

  

spl_autoload_register(array(‘Loader‘, ‘loadClass‘));

//spl_autoload_register(array(__CLASS__, ‘loadClass‘));

//spl_autoload_register(array($this, ‘loadClass‘));

$a = new A();

时间: 2024-10-09 08:13:58

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

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

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

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

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

Final关键字和类的自动加载

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

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

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

类的自动加载

很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件). 在 PHP 5 中,不再需要这样了.可以定义一个 __autoload() 函数,它会在试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类. spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载.因此,不再建议使用 __autoload() 函数,在

PHP的类文件自动加载机制

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

php 类的自动加载

在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件. 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件). 在 PHP 5 中,已经不再需要这样了. spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载.通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类. Tip 尽管 __autoload()

类的自动加载,静态属性静态方法

类的自动加载 function 完成类的自动加载    param: $clas_name 是类的名称    说明: 当程序员使用到一个未定义的类时,就会自动的触发__autoLoad这个函数, 该函数是系统提供的 静态变量是属于所有对象,可以被所有对象共享 静态变量与静态方法 静态属性是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. l  定义静态属性 访问修饰符 static 静态属性名;    stati

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

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