zoukankan      html  css  js  c++  java
  • php+namespace+autoload机制

    namespace 主要作用,防止类名相同导致的加载问题。相当于 window下的 “域”

    namespace 更像一个权限的功能,如果不在这个“域”里,即使require了文件,也无法new该类。

    注意点:

      1、定义或声明namespace时,要放在第一行。

      2、调用函数或实例化对象是,默认调用命名空间内类的function或类文件。

      3、use就相当于一种声明,并不解析和加载。相当于 给即将要使用的namespace起别名,这样就不需要输入太长的 namespace了。

    //下面是bar.php文件

    <?php
    namespace test;  //定义或声明一个 命名空间
    
    class Bar
    {
        public function dayin()
        {
            echo 'ffff';
        }
        
    }

    //下面是test.php文件

    <?php
    namespace test; //用法一  仍然需要 require 将bar.php引进。 
    //相当于把当前文件,加入到test域中,这样域中文件就可以相互引用了,
    require "bar.php";
    $bar = new Bar();
    $bar->dayin();
    
    
    //用法二 ,类名带上命名空间地址
    require "bar.php";
    $bar = new 	estBar();  //ok
    $bar->dayin();
    
    //用法三 ,use 引入.use主要作用是设置别名 use ** as * . 但省略as后面,相当于别名就为Bar
    use testBar; //ok   // use test;  //不行 The use statement with non-compound name 'test' has no effect  compound复合、妥协
    require "bar.php";
    $bar = new Bar();  
    $bar->dayin();

    __autoload() 魔术方法:

      可以实现 “延迟加载”或者“用时加载”,即只有需要这个类时,才会加载进内存中,避免资源浪费。

    当php引擎第一次使用类A,但是找不到时,会自动调用__autoload方法,并将类名“A”作 为参数传入。所以,我们需要的做的就是根据类名,找到对应的文件,并包含进来,如果我们的方法也找不到,那么php引擎就会报错。注意,这里可以只用 require,因为一旦包含进来后,php引擎再遇到类A时,将不会调用__autoload,而是直接使用内存中的类A,不会导致多次包含。

    所以,使用__autoload的关键在于,如何根据类名,找到对应类定义的文件。

    Yii框架下 设置默认自动加载函数

    spl_autoload_register 注册myautoload函数为 __autoload()函数。

    spl_autoload_register(array('YiiBase','myautoload'));

    相关链接:

      http://blog.csdn.net/xxhsu/article/details/8463624   //讲namespace 和下面一个连接一起看

      http://www.cnblogs.com/yjf512/archive/2013/05/14/3077285.html  //讲namespace

      http://www.cnblogs.com/bourneli/archive/2012/09/08/2676965.html  //good 讲autoload

      http://blog.csdn.net/zhaozhi406/article/details/9325581 //Yii中autoload机制

      http://www.eeice.com/archive/design/spl_autoload_register.html  //Yii中autoload机制

  • 相关阅读:
    Nginx使用
    nginx常见配置详解
    配置yum源
    nginx常见使用方式和日志功能
    SpringCloud学习篇《一》
    myeclipse的各种背景:黑色,护眼,欢迎围观
    java基础二 <流程控制语句, 方法,数组,java内存结构> 未完待续...
    fastjson解析超长json串以及转成list,map等方法实例
    Linux下权限的修改-JDK的配置-文件的常见操作
    java面试基础大全,绝对经典<126-170><转>
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/4387735.html
Copyright © 2011-2022 走看看