php類自動加載失敗的處理方案及實(shí)例代碼
1、打開相應(yīng)的PHP代碼文件。
2、添加“$class = str_replace("\\","/",$class);”代碼即可。
文件在本地win系統(tǒng)下測試無異常,代碼如下:
function stu_autoload($class){ if(file_exists($class.".php")){ require ( $class.".php"); }else{ die("unable to autoload Class $class"); } } spl_autoload_register("stu_autoload");
部署到Ubuntu服務(wù)器上異常,報(bào)錯(cuò)為 unable to autoload Class xxxxxx
解決方案
根據(jù)報(bào)錯(cuò),發(fā)現(xiàn) $class 的值需要形如 stuApp\dao\StuInfo 才可行, 文件路徑需要將 \ 轉(zhuǎn)義成 /,因此添加一行代碼即可。
$class = str_replace("\\","/",$class);
綜上,修改后的自動加載代碼如下:
function stu_autoload($class){ //路徑轉(zhuǎn)義 $class = str_replace("\\","/",$class); if(file_exists($class.".php")){ require ( $class.".php"); }else{ die("unable to autoload Class $class"); } } spl_autoload_register("stu_autoload");
知識點(diǎn)擴(kuò)充:
類的自動加載
在外面的頁面中,并不需要去引入類文件,但程序會在需要一個(gè)類的時(shí)候自動去“動態(tài)加載”該類。
① 創(chuàng)建一個(gè)對象的時(shí)候new
② 直接使用一個(gè)類名(操作靜態(tài)屬性與方法)
使用spl_autoload_register()
用它注冊(聲明)多個(gè)可以代替__autoload()作用的函數(shù),自然也得去定義這些函數(shù),并且函數(shù)的作用跟__autoload()作用一樣,不過此時(shí)可以應(yīng)對更多的情形
//注冊用于自動加載的函數(shù) spl_autoload_register("model"); spl_autoload_register("controll"); //分別定義兩個(gè)函數(shù) function model($name){ $file = './model/'.$name.'.class.php'; if(file_exists($file)){ require './model/'.$name.'.class.php'; } } //如果需要一個(gè)類,但當(dāng)前頁面還沒加載該類 //就會依次調(diào)用model()和controll(),直到找到該類文件加載,否則就報(bào)錯(cuò) function controll($name){ $file = './controll/'.$name.'.class.php'; if(file_exists($file)){ require './controll/'.$name.'.class.php'; } }
//若注冊的是方法而不是函數(shù),則需要使用數(shù)組 spl_autoload_register( //非靜態(tài)方法 array($this,'model'), //靜態(tài)方法 array(__CLASS__,'controller') );
項(xiàng)目場景應(yīng)用
//自動加載 //控制器類 模型類 核心類 //對于所有的類分為可以確定的類以及可以擴(kuò)展的類 spl_autoload_register('autoLoad'); //先處理確定的框架核心類 function autoLoad($name){ //類名與類文件映射數(shù)組 $framework_class_list = array( 'mySqldb' => './framework/mySqldb.class.php' ); if(isset($framework_class_list[$name])){ require $framework_class_list[$name]; }elseif(substr($name,-10)=='Controller'){ require './application/'.PLATFORM.'/controller/'.$name.'.class.php'; }elseif(substr($name,-6)=='Modele'){ require './application/'.PLATFORM.'/modele/'.$name.'.class.php'; } }
到此這篇關(guān)于php類自動加載失敗的處理方案及實(shí)例代碼的文章就介紹到這了,更多相關(guān)php類自動加載失敗的解決辦法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php中刪除數(shù)組的第一個(gè)元素和最后一個(gè)元素的函數(shù)
這篇文章主要介紹了php中刪除數(shù)組的第一個(gè)元素和最后一個(gè)元素的函數(shù),需要的朋友可以參考下2015-03-03php utf-8轉(zhuǎn)unicode的函數(shù)
php下我們想把uft-8,轉(zhuǎn)成unicode可以用下面的函數(shù)來實(shí)現(xiàn)2008-06-06PHP編程求最大公約數(shù)與最小公倍數(shù)的方法示例
這篇文章主要介紹了PHP編程求最大公約數(shù)與最小公倍數(shù)的方法,涉及php數(shù)學(xué)計(jì)算的相關(guān)運(yùn)算技巧,需要的朋友可以參考下2017-05-05PHP使用json_encode函數(shù)時(shí)不轉(zhuǎn)義中文的解決方法
這篇文章主要介紹了PHP使用json_encode函數(shù)時(shí)不轉(zhuǎn)義中文的解決方法,給出一個(gè)自定義函數(shù)代替json_encode函數(shù)的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11發(fā)款php蜘蛛統(tǒng)計(jì)插件只要有mysql就可用
有時(shí)候我們?yōu)榱丝匆幌轮┲肱佬械那闆r,不得不對日志進(jìn)行大量的分析,由此想做一款插件可以記錄蜘蛛的情況。在第一次做的時(shí)候,只是記錄下蜘蛛的爬行次數(shù),不大好分析。2010-10-10PHP導(dǎo)出MySQL數(shù)據(jù)到Excel文件(fputcsv)
經(jīng)常會碰到需要從數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)到Excel文件,用一些開源的類庫,比如PHPExcel,確實(shí)比較容易實(shí)現(xiàn),但對大量數(shù)據(jù)的支持很不好,很容易到達(dá)PHP內(nèi)存使用上限。2011-07-07采用header定義為文件然后readfile下載(隱藏下載地址)
有時(shí)候我們?yōu)榱穗[藏真實(shí)的下載地址,我們通過采用header定義為文件然后readfile下載,但這樣會加大服務(wù)器的負(fù)擔(dān),一般不建議下載量比較大的文件2014-01-01