zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP 自动加载对象(以MVC框架为例)

PHP自动对象框架MVC 加载 为例
2023-09-14 08:59:47 时间
    public function __construct() {           spl_autoload_register ( array ($this, model ) );           spl_autoload_register ( array ($this, helper ) );           spl_autoload_register ( array ($this, controller ) );           spl_autoload_register ( array ($this, library ) );       }              public function library($class) {           set_include_path ( get_include_path () . PATH_SEPARATOR . /lib/ );           spl_autoload_extensions ( .library.php );           spl_autoload ( $class );       }              public function controller($class) {           $class = preg_replace ( /_controller$/ui, , $class );                      set_include_path ( get_include_path () . PATH_SEPARATOR . /controller/ );           spl_autoload_extensions ( .controller.php );           spl_autoload ( $class );       }              public function model($class) {           $class = preg_replace ( /_model$/ui, , $class );                      set_include_path ( get_include_path () . PATH_SEPARATOR . /model/ );           spl_autoload_extensions ( .model.php );           spl_autoload ( $class );       }              public function helper($class) {           $class = preg_replace ( /_helper$/ui, , $class );                      set_include_path ( get_include_path () . PATH_SEPARATOR . /helper/ );           spl_autoload_extensions ( .helper.php );           spl_autoload ( $class );       }   //call   autoloader::init ();  

2.其中 spl_autoload_register() 用来注册一个自动调用的函数, 可以注册多个函数!

3.$iniPath = ini_get(include_path);ini_set(include_path, $iniPath. . $cPath);通过设置环境变量来达到autoload目的,设置包含路径,以后可以直接包含这些目录中的文件,不需要再写详细的路径了。方法三取自php.MVC,使用参照php.MVC文档


* $Header: /PHPMVC/phpmvc-base/WEB-INF/classes/phpmvc/utils/ClassPath.php,v 1.4 2006/02/22 07:18:26 who Exp $   * $Revision: 1.4 $   * $Date: 2006/02/22 07:18:26 $   class ClassPath {       // ----- Depreciated ---------------------------------------------------- //       /**       *  p Setup the application class paths (PHP include_path) for the included       * class files, for the duration of the main script /p        *       * p Returns the class path string for testing purposes       *       * @depreciated       * @param string The appServerRootDir. eg: C:/Www/phpmvc       * @param array      An array of sub-application paths, br        *  eg: $subAppPaths[] = WEB-INF/classes/example;, ...       * @param string The OS [Optional] [UNIX|WINDOWS|MAC|...] if we have       *  trouble detecting the server OS type. Eg: path errors.       * @public       * @returns string       */       function setClassPath($appServerRootDir=, $subAppPaths=, $osType=) {           // Set AppServer root manually for now           if($appServerRootDir == ) {               echo Error: ClassPath :- No php.MVC application root directory specified;               exit;           }           #$_ENV; // PHP Superglobals !!           // Setup the main phpmvc application include() directories here           // Note: could be placed in a n xml config file later !!           $appDirs = array();           $appDirs[] = ; // application root directory           $appDirs[] = lib;           // Add the sub-application paths, if any           if(is_array($subAppPaths)) {               $appDirs = array_merge($appDirs, $subAppPaths);           }           // Setup the platform specific path delimiter character           $delim = NULL;  // path delimiter character. (Windows, Unix, Mac!!)           $winDir = NULL;           if( (int)phpversion()   4 ) {               // PHP 5               $winDir = $_ENV["windir"];                  // See: PHP v.4.1.0 Superglobals            } else {               // PHP 4               global $HTTP_ENV_VARS;                      // depreciated-                if( array_key_exists("windir", $HTTP_ENV_VARS) ) {                   $winDir = $HTTP_ENV_VARS["windir"]; // will be replaced with $_ENV               }           }           if($osType != ) {               if( eregi("WINDOWS", $osType) ) {                   $delim = ;;   // Windows               } elseif( eregi("UNIX", $osType) ) {                   $delim = :;   // Unix               } elseif( eregi("MAC", $osType) ) {                   $delim = :;   // Mac !!!!!               }           }           if($delim == NULL) {               if( eregi("WIN", $winDir) ) { // _ENV["C:\\Win2K"]                   $delim = ;;   // Windows               } else {                   $delim = :;   // Unix, Mac !!               }           }           // Get the current working directory           $path = $appServerRootDir;           // Strip path directories below WEB-INF           $pathToWebInf = ereg_replace("WEB-INF.*$", , $path);           // Replace path backslashes with forward slashes           // Note: PHP Regular Expressions do not work with backslashes           $pathToWebInf = str_replace("\\", "/", $pathToWebInf);           // Drop the trailing slash, if one is present           $pathToWebInf = ereg_replace("/$", , $pathToWebInf);           // Setup the environment path string           $classPath = NULL;           foreach($appDirs as $appDir) {                 $classPath .= $pathToWebInf./.$appDir.$delim;           }           // Remove trailing delimiter character           $classPath = substr($classPath, 0, -1);            // Setup the include_path for the duration of the main php.MVC script           ini_set(include_path, $classPath);           return $classPath;  // for testing       }       // ----- Public Methods ------------------------------------------------- //       function getClassPath($appServerRootDir=, $appDirs, $osType=) {           // Set AppServer root manually for now           if($appServerRootDir == ) {               echo Error: ClassPath :- No php.MVC application root directory specified;               exit;           }           #$_ENV; // PHP Superglobals !!           // Setup the platform specific path delimiter character           $delim = NULL;  // path delimiter character. (Windows, Unix, Mac!!)           if($osType == ) {               // PHPs build in constant "PATH_SEPARATOR" [unix (:) / win (;)]               $delim = PATH_SEPARATOR;           } else {               // It is handy to be able to specift the OS type for testing               $delim = ClassPath::getPathDelimiter($osType);           }           // Get the current working directory           $path = $appServerRootDir;           // Strip path directories below WEB-INF           $pathToWebInf = ereg_replace("WEB-INF.*$", , $path);           // Replace path backslashes with forward slashes           // Note: PHP Regular Expressions do not work with backslashes           $pathToWebInf = str_replace("\\", "/", $pathToWebInf);           // Drop the trailing slash, if one is present           $pathToWebInf = ereg_replace("/$", , $pathToWebInf);           // Setup the environment path string           $classPath      = NULL;           $AbsolutePath   = False;    // Say: "/Some/Unix/Path/" or "D:\Some\Win\Path"           foreach($appDirs as $appDir) {                 // Check if the specified system path is an absolute path. Absolute system               // paths start with a "/" on Unix, and "Ch\:" or "Ch/:" on Win 32.               // Eg: "/Some/Unix/Path/" or "D:\Some\Win\Path" or "D:/Some/Win/Path".               $AbsolutePath = ClassPath::absolutePath($appDir);               if($AbsolutePath == True) {                   $classPath .= $appDir.$delim;               } else {                   $classPath .= $pathToWebInf./.$appDir.$delim;               }           }           // Remove trailing delimiter character           $classPath = substr($classPath, 0, -1);            return $classPath;  // for testing       }       /**       * Concatenate environment path strings       *  p        * Returns the two path strings joined with the correct environment       * string delimiter for the host operating system.       *        * @param        string  The path string       * @param        string  The path string       * @param        string  The operating type [optional]       * @public       * @returns  string         */       function concatPaths($path1, $path2, $osType=) {           // Setup the platform specific path delimiter character           $delim = NULL;  // path delimiter character. (Windows, Unix, Mac!!)           $delim = ClassPath::getPathDelimiter($osType);           $path = $path1 . $delim . $path2;           return $path;       }       // ----- Protected Methods ---------------------------------------------- //       /**       * Get environment path delimiter.       *  p        * Returns the environment string delimiter for the host operating system.       *       * @param        string  The operating type [optional]       * @protected       * @returns  string         */       function getPathDelimiter($osType=) {           // Setup the platform specific path delimiter character           $delim = NULL;  // path delimiter character. (Windows, Unix, Mac!!)           $winDir = NULL;           if( (int)phpversion()   4 ) {               // PHP 5               $winDir = $_ENV["windir"];                  // See: PHP v.4.1.0 Superglobals            } else {               // PHP 4               global $HTTP_ENV_VARS;                      // depreciated-                if( array_key_exists("windir", $HTTP_ENV_VARS) ) {                   $winDir = $HTTP_ENV_VARS["windir"]; // will be replaced with $_ENV               }           }           if($osType != ) {               if( eregi("WINDOWS", $osType) ) {                   $delim = ;;   // Windows               } elseif( eregi("UNIX", $osType) ) {                   $delim = :;   // Unix               } elseif( eregi("MAC", $osType) ) {                   $delim = :;   // Mac !!!!!               }           }           if($delim == NULL) {               if( eregi("WIN", $winDir) ) { // _ENV["C:\\Win2K"]                   $delim = ;;   // Windows               } else {                   $delim = :;   // Unix, Mac !!               }           }           return $delim;       }       /**        * Check if the specified system path is an absolute path. Absolute system       * paths start with a "/" on Unix, and "Ch\:" or "Ch/:" on Win 32.       * Eg: "/Some/Unix/Path/" or "D:\Some\Win\Path" or "D:/Some/Win/Path".       *       * Returns True if the suppplied path absolute, otherwise returns False       *       * @param string The path to check, like: "/Some/Unix/Path/" or       *                       "D:\Some\Win\Path".       * @public       * @returns boolean       */       function absolutePath($systemPath) {           // Say: "/Some/Unix/Path/" or "D:\Some\Win\Path" or "D:/Some/Win/Path"           $fAbsolutePath  = False;        // Boolean flag value           //"[/]Some/Unix/Path/"           if (preg_match("/^\//", $systemPath)) {               $fAbsolutePath = True;           //"[D:\]Some\Win\Path"           // "i" says "ignore case"           // Note the extra escape "\" reqd for this to work with  PHP !!!           } elseif(preg_match("/^[a-z]:\\\/i", $systemPath)) {                   $fAbsolutePath = True;           //"[D:/]Some/Win/Path"           } elseif(preg_match("/^[a-z]:\//i", $systemPath)) {               $fAbsolutePath = True;           }           return $fAbsolutePath;       }  
* ====================================================================   * The module paths   * @author John C Wildenauer   * @version   * @public   class ModulePaths {       /**       * Return an array of global paths       *       * @public       * @returns array       */       function getModulePaths() {           // Setup the main module include() directories here           // Note: could be placed in an xml config file later !!           $appDirs    = array();           $appDirs[]  = ; // starting with the sub-application home directory           $appDirs[]  = login;           $appDirs[]  = login/classes;           $appDirs[]  = login/tpl;           $appDirs[]  = project;           $appDirs[]  = project/classes;           $appDirs[]  = project/tpl;           return $appDirs;       }  
// Set the application path   $moduleRootDir = D:/workspace/eh_plat_wms/dev_src;    // no trailing slash   // Set the OS Type [Optional] [UNIX|WINDOWS|MAC] if we have   // trouble detecting the server OS type. Eg: path errors.   $osType = WINDOWS;   // Setup application class paths first   include lib/ClassPath.php;   // Setup the module paths   include config/ModulePaths.php;   $modulePaths = ModulePaths::getModulePaths();   $mPath = ClassPath::getClassPath($moduleRootDir,$modulePaths, $osType);   // Retrieve and merge the php.ini path settings   $iniPath = ini_get(include_path);   $cPath = ClassPath::concatPaths($mPath, $iniPath, $osType);   echo $cPath;   // And set the include_path variables, as used by the file functions   ini_set(include_path, $cPath);  
框架外的PHP读取.env文件(php5.6、7.3可用版) 背景:由于项目需要,在框架外(public文件夹下)新建了一个原生的php文件,由于不知道怎么解决。只需要在宝塔上的php相应的版本上把禁用函数去除即可。其他的参数自己根据代码获取,代码简单,自己读吧。“框架外的php文件,怎么使用DB操作”(我的环境 nginx php7,3)于是上网搜索了一早上也没能又方法。于是我使用了,原生连接方法。index.php文件。这里如果出现这样的问题。............
PHP+Laravel框架RabbitMQ简单使用(路由模式) 一、简介 路由模式跟发布订阅模式类似,然后在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列
PHP+Laravel框架RabbitMQ简单使用(Pub/Sub模式) 一、简介 publish-and- subscribe, 即发布订阅模型。在Pub/Sub模型中,生产者将消息发布到一个主题(Topic)中,订阅了该Topic的所有下游消费者,都可以接收到这条消息。 每个消息可以有多个订阅者; 客户端只有订阅后才能接收到消息; 持久订阅和非持久订阅。 发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息; 持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线; 非持久订阅:订阅者为了接受消息,必须一直在线。 当只有一个订阅者时约等于点对点模式
PHP+Laravel框架RabbitMQ简单使用(工作队列模式(竞争消费者模式)) 工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式 假如我们拥有两个消费者,默认情况下,RabbitMQ 将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为轮询。 假如有一些非常耗时的任务,某个消费者在缓慢地进行处理,而另一个消费者则空闲,显然是非常消耗资源的。