php中__autoload()方法詳解

原文地址:http://www.php100.com/html/php/lei/2013/0905/5267.html

[導讀] PHP在魔術函數__autoload()方法出現以前,如果你要在一個程序文件中實例化100個對象,那么你必須用include或者require包含進來100個類文件,或者你把這100個類定義在同一個類文件中——相信這個文件一定會非常大PHP在魔術函數__autoload()方法出現以前,如果你要在一個程序文件中實例化100個對象,那么你必須用include或者require包含進來100個類文件,或者你把這100個類定義在同一個類文件中——相信這個文件一定會非常大。但是__autoload()方法出來了,以后就不必為此大傷腦筋了,這個類會在你實例化對象之前自動加載制定的文件。下邊我們通過一個例子來看一下,具體的使用方法,并在稍后說明使用PHP魔術函數__autoload應該注意些什么。代碼如下    復制代碼//定義一個類ClassA,文件名為ClassA.php
class ClassA{public  function __construct(){echo "ClassA load success!";}
}//定義一個類ClassB,文件名為ClassB.php,ClassB繼承ClassA
class ClassB extends ClassA {public function __construct(){//parent::__construct();echo "ClassB load success!";}
}定義兩個測試用的類之后,我們來編寫一個含有__autoload()方法的PHP運行程序文件如下:代碼如下    復制代碼function __autoload($classname){$classpath="./".$classname.'.php';if(file_exists($classpath)){require_once($classpath);}else{echo 'class file'.$classpath.'not found!';}
}$newobj = new ClassA();
$newobj = new ClassB();這個文件的運行是一點問題都沒有的,可見autoload是多么的好用啊,呵呵……
但是不得不提醒你一下幾個方面是必須要注意的。1、如果類存在繼承關系(例如:ClassB extends ClassA),并且ClassA不在ClassB所在目錄
利用__autoload魔術函數實例化ClassB的時候就會受到一個致命錯誤:代碼如下    復制代碼
Fatal error: Class ‘Classd’ not found in ……ClassB.php on line 2,解決方法:把所有存在extends關系的類放在同一個文件目錄下,或者在實例化一個繼承類的時候在文件中手工包含被繼承的類;2、另外一個需要注意的是,類名和類的文件名必須一致,才能更方便的使用魔術函數__autoload;其他需要注意的事情:
3、在CLI模式下運行PHP腳本的話這個方法無效;4、如果你的類名稱和用戶的輸入有關——或者依賴于用戶的輸入,一定要注意檢查輸入的文件名,例如:.././這樣的文件名是非常危險的。

?

轉載于:https://www.cnblogs.com/lixiuran/p/3769879.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260389.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python讀取sql_從python讀取sql的實例方法

從python讀取sql的方法: 1、利用python內置的open函數讀入sql文件; 2、利用第三方庫pymysql中的connect函數連接mysql服務器; 3、利用第三方庫pandas中的read_sql方法讀取傳入的sql文件即可。 python 直接讀取 sql 文件,達到使用 …

我笨,但我不傻

2019獨角獸企業重金招聘Python工程師標準>>> 威哥說:很多朋友給我留言,在學習的過程中如何堅持下去,關于努力和目標,我想談談自己的理解,有不同見解的地方,歡迎留言跟我探討哈。 if(努力苦逼) r…

GNU make manual 翻譯( 一百零四)

繼續翻譯 4.7 Rules without Recipes or Prerequisites If a rule has no prerequisites or recipe, and the target of the rule is a nonexistent file, then make imagines this target to have been updated whenever its rule is run. This implies that all targets dep…

mysql 數字 除以 一萬_騰訊股票接口、和訊網股票接口、新浪股票接口、雪球股票數據、網易股票數據...

騰訊股票接口:大單數據http://stock.finance.qq.com/sstock/list/view/dadan.php?tjs&csz002451&max80&p1&opt10&o0opt10 11 12 13 分別對應成交額大于等于(100萬 200萬 500萬 1000萬)opt1,2,3,4,5,6,7,8 分別對應成交量大于等于(100手 200手 …

asp.net url傳值,彈窗

一,<a>標簽鏈接式傳值 1&#xff0c; <a href"News_list.aspx?ClassID<%#((DataRowView)Container.DataItem)["ClassID"]%>&Editor<%#((DataRowView)Container.DataItem)["Editor"]%>" >傳值</a> 2, <a&g…

windows下python視頻加速調節_Windows下python+ffmpeg實現批量提取、切割視頻中的音頻...

廢話不說&#xff0c;直接上代碼 #遍歷所有mp4文件名->文件名改為字母形式->fffmpeg批量提取音頻、切割音頻->改回中文名 import os import subprocess current os.getcwd() dirs os.listdir(current) for i in dirs: if os.path.splitext(i)[1] ".mp4":…

(轉)千萬別熬夜:身體器官晚上工作時間表一覽

原文連接&#xff1a;http://jiuyinguan.blog.163.com/blog/static/20907903720126801015713/ 任何試圖更改生物鐘的行為&#xff0c;都將給身體留下莫名其妙的疾病&#xff0c;20、30年之后再后悔&#xff0c;已經來不及了。 一、晚上9-11點為免疫系統&#xff08;淋巴&#x…

伯納德?羅森伯格先生參加華為技術2016首屆國際光電連接技術研討會

近日&#xff0c;來自羅森伯格德國總部的CTO首席技術官伯納德羅森伯格先生參加了由華為技術組織的2016首屆國際光電連接技術研討會。本屆研討會華為共邀請了來自全球的約十家著名光電技術領先廠家及合作伙伴參與&#xff0c;共同探討未來數十年的光纖電子技術發展方向并分享最新…

如何使用python效率_Python的5中提高效率的用法

任何編程語言的高級特征通常都是通過大量的使用經驗才發現的。比如你在編寫一個復雜的項目&#xff0c;并在 stackoverflow 上尋找某個問題的答案。然后你突然發現了一個非常優雅的解決方案&#xff0c;它使用了你從不知道的 Python 功能&#xff01;這種學習方式太有趣了&…

記“debug alipay”一事

背景&#xff1a;客戶支付成功&#xff0c;無法返回支付結果 查找原因&#xff0c;追蹤代碼: verified AlipayNotify.verify(params,alipayConfig.sign_type,alipayConfig.partner,alipayConfig.key,alipayConfig.input_charset); if (!verified) { Debug.logError("##…

Xamarin 跨移動端開發系列(01) -- 搭建環境、編譯、調試、部署、運行

&#xff08;本文是基于老版本的VS和Xamarin&#xff0c;而VS2017已經集成了Xamarin&#xff0c;所以&#xff0c;本文已經過時&#xff0c;最新的Xamarin開發介紹請參見 使用 Xamarin開發手機聊天程序 。&#xff09; 如果是.NET開發人員&#xff0c;想學習手機應用開發&#…

內網穿透 無需公網ip_無需端口映射、無需公網IP,60秒實現FTP服務遠程訪問

互聯網的一大特點是實現信息共享&#xff0c;其中文件傳輸是信息共享十分重要的內容之一。科技公司更是離不開它。銷售、庫存、客戶資料等等數據需要隨時共享同步。當需要考慮到文件傳輸安全、傳輸質量、傳輸穩定性、訪問控制等諸多因素時&#xff0c;FTP服務器就成了解決文件傳…

mysql查詢的時候會涉及到鎖_Mysql 查詢 鎖的問題?

以下五種方法可以快速定位全局鎖的位置&#xff0c;僅供參考。方法1&#xff1a;利用 metadata_locks 視圖此方法僅適用于 MySQL 5.7 以上版本&#xff0c;該版本 performance_schema 新增了 metadata_locks&#xff0c;如果上鎖前啟用了元數據鎖的探針(默認是未啟用的)&#x…

Clojure:導入lein項目到IntelliJ IDEA

首先&#xff0c;我們需要先創建一個lein項目&#xff08;廢話。。&#xff09; lein new [項目名稱] 然后生成Maven的pom.xml文件 cd [項目目錄]lein pom 最后&#xff0c;在InteliJ IDEA中選擇導入Maven項目&#xff0c;選擇剛剛生成的pom.xml文件即可。 轉載于:https://www.…

git 工具_Github開源工具分享之自托管GIT服務工具Gogs

介紹Gogs項目旨在構建一種簡單&#xff0c;穩定和可擴展的自托管Git服務&#xff0c;該服務可以通過最輕松的方式進行設置。使用Go語言開發的git自托管服務&#xff0c;部署十分簡單&#xff0c;可以在Go支持的所有平臺(包括Linux&#xff0c;macOS&#xff0c;Windows和ARM)上…

Mariadb 二進制半自動安裝腳本

Mariadb 二進制半自動安裝腳本系統環境&#xff1a;centosx86_64Mariadb版本&#xff1a;mariadb-5.5.36-linux-x86_64#!/bin/bash#auth:code7#description:auto-mariadb#version:1.0groupadd -r -g 306 mysqluseradd -r -g 306 -u 306 mysql#創建mysql的組和用戶tar -xvf mari…

hdu 4414 Finding crosses

http://acm.hdu.edu.cn/showproblem.php?pid4414 簡單枚舉 代碼&#xff1a; #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <queue> #include <vector> #include <algorithm>#define LL …

mysql皮秒轉成年月日時分秒_MySQL performance_schema 中 TIMER_*類字段 的易讀轉換

performance_schema中有很多的表(語句信息表&#xff0c;事務信息表等)記錄執行的SQL的具體信息&#xff0c;執行事務的具體信息&#xff0c;其中都會有一個叫做TIMER_START的字段&#xff0c;這個字段的值易讀性很差&#xff0c;官方文檔說是皮秒&#xff0c;但也沒說怎么轉成…

c++函數相關

1&#xff0c;內連函數 inline 返回值類型 函數名&#xff08;形參列表&#xff09; 普通函數成為內連函數&#xff1a;在普通函數聲明之前加上inline 成員函數成為內連函數&#xff1a;在類中定義的函數全部默認為內連函數&#xff0c;可以顯示加上inline或者不加&#xff1b;…

goto語句_11. Go語言流程控制:goto 無條件跳轉

本文原文&#xff1a;http://golang.iswbm.comGithub&#xff1a;https://github.com/iswbm/GolangCodingTimeGo里的流程控制方法還是挺豐富&#xff0c;整理了下有如下這么多種&#xff1a;if - else 條件語句switch - case 選擇語句for - range 循環語goto 無條件跳轉語句def…