本文目錄一覽:
- 1、php如何當前頁面加載其他網頁?
- 2、詳解PHP文件的自動加載(autoloading)
- 3、如何設計一個php自動加載類
- 4、php composer怎麼用
- 5、如何加載第三方類庫phpexcel的所有PHP文件
php如何當前頁面加載其他網頁?
PHP中加載其他網頁可以使用 iframe框架加載(屬於HTML) 、include函數加載 或者使用 AJAX的方法加載。
iframe加載主要是用於HTML框架的加載,和PHP沒什麼太大的關係,比較省資源!
include 方法加載適合本地的頁面加載,貌似無法跨域。
AJAX 方法可是實現無刷加載,比較像WINDOWS程序一樣!用戶體驗較好。
具體代碼如下:
iframe src=”需要加載的頁面” /iframe
?php include “需要加載的頁面”; ?
script$.get(‘需要加載的頁面’);!–具體參考JQuery的Ajax–/script
詳解PHP文件的自動加載(autoloading)
傳統上,在PHP里,當我們要用到一個class文件的時候,我們都得在文檔頭部require或者include一下:
?php
require_once(‘../includes/functions.php’);
require_once(‘../includes/database.php’);
require_once(‘../includes/user.php’);
…
但是一旦要調用的文檔多了,就得每次都寫一行,瞅着也不美觀,有什麼辦法能讓PHP文檔自動加載呢?
?php
function
__autoload($class_name)
{
require
“./{$class_name}.php”;
}
對,可以使用PHP的魔法函數__autoload(),上面的示例就是自動加載當前目錄下的PHP文件。當然,實際當中,我們更可能會這麼來使用:
?php
function
__autoload($class_name)
{
$name
=
strtolower($class_name);
$path
=
“../includes/{$name}.php”;
if(file_exists($path)){
require_once($path);
}else{
die(“the
file
{$class_name}
could
not
be
found”);
}
}
也即是做了一定的文件名大小寫處理,然後在require之前檢查文件是否存在,不存在的話顯示自定義的信息。
類似用法經常在私人項目,或者說是單一項目的框架中見到,為什麼呢?因為你只能定義一個__autoload
function,在多人開發中,做不到不同的developer使用不同的自定義的autoloader,除非大家都提前說好了,都使用一個__autoload,涉及到改動了就進行版本同步,這很麻煩。
也主要是因為此,有個好消息,就是這個__autoload函數馬上要在7.2版本的PHP中棄用了。
Warning
This
feature
has
been
DEPRECATED
as
of
PHP
7.2.0.
Relying
on
this
feature
is
highly
discouraged.
那麼取而代之的是一個叫spl_autoload_register()的東東,它的好處是可以自定義多個autoloader.
//使用匿名函數來autoload
spl_autoload_register(function($class_name){
require_once(‘…’);
});
//使用一個全局函數
function
Custom()
{
require_once(‘…’);
}
spl_autoload_register(‘Custom’);
//使用一個class當中的static方法
class
MyCustomAutoloader
{
static
public
function
myLoader($class_name)
{
require_once(‘…’);
}
}
//傳array進來,第一個是class名,第二個是方法名
spl_autoload_register([‘MyCustomAutoloader’,’myLoader’]);
//甚至也可以用在實例化的object上
class
MyCustomAutoloader
{
public
function
myLoader($class_name)
{
}
}
$object
=
new
MyCustomAutoloader;
spl_autoload_register([$object,’myLoader’]);
值得一提的是,使用autoload,無論是__autoload(),還是spl_autoload_register(),相比於require或include,好處就是autoload機制是lazy
loading,也即是並不是你一運行就給你調用所有的那些文件,而是只有你用到了哪個,比如說new了哪個文件以後,才會通過autoload機制去加載相應文件。
當然,laravel包括各個package里也是經常用到spl_autoload_register,比如這裡:
/**
*
Prepend
the
load
method
to
the
auto-loader
stack.
*
*
@return
void
*/
protected
function
prependToLoaderStack()
{
spl_autoload_register([$this,
‘load’],
true,
true);
}
如何設計一個php自動加載類
在php中,自動加載一般都是通過魔術方法__autoload來實現的,在程序中,當需要一個類的定義文件時(如實例化一個對象,集成自一個類),如找不到類定義文件時,就會自動觸發__autoload方法,所以我們可以在該方法中編寫代碼完成類的加載。要編寫代碼實現類的自動加載,很重要的兩點一是文件結構規劃,二是類的命名,尤其是命名,從命名中要體現出該類的所屬文件,比如PersonController,一看就知道是一個控制器,UserModel,一看便知是模型,這樣就可以到對應的目錄下去加載該類。針對你所列出的文件結構和文件命名,顯然不符合上述規則,所以想通過__autoload實現自動加載有難度。
php composer怎麼用
Composer很好的解決了PHP的包管理和依賴問題,只需要import一個文件,Composer中管理的所有庫就會按需加載,而不需要每個import。
先介紹一下Composer的安裝。Composer的官方地址:
安裝
curl -sS | php
這樣在當前目錄下會下載一個composer.phar的文件,為了方便,我們可以重命名一下,並放到/usr/local/bin下,方便執行。
mv composer.phar /usr/local/bin/composer
使用
一般我習慣把Composer放在/opt下,所以先創建一個Composer的目錄
mkdir /opt/composer
先下載一個KLogger,一個寫日誌的庫,本人比較喜歡。
cd /opt/composer
composer require katzgrau/klogger:dev-master
這樣,KLogger就被下載下來了,使用很簡單,只需要引入一個文件。
?php
require ‘/opt/composer/vendor/autoload.php’;
$logger = new Katzgrau\KLogger\Logger(__DIR__.’/logs’);
…
KLogger可以使用了,我們在下載一個別的庫,Medoo:一個輕量級的數據庫框架。同樣的方式來下載。
cd /opt/composer
composer require catfan/Medoo
使用同理
?php
require ‘/opt/composer/vendor/autoload.php’;
$medoo = new medoo();
//繼續使用KLogger
$logger = new Katzgrau\KLogger\Logger(__DIR__.’/logs’);
…
使用很簡單,只要引入了 vendor/autoload.php ,就可以自動引入用到庫,的確很酷。
加速
如果發現composer執行起來很慢,可以考慮換個鏡像。這裡推薦一個日本的鏡像: 。
執行
composer config -g -e
編輯後
{
“config”: {}
,
“repositories”: [
{ “packagist”: false },
{
“type”: “composer”,
“url”: “”
}
]
}
如果發現composer長時間沒反應,可以在執行時候加入 -vvv 選項,可以輸出更多信息,方便查找問題。
composer -vvv require …
最後
PHP的 spl_autoload_register 可以很方便做按需引入,當 new 一個類沒發現的時候,就會觸發,然後我們自己按照規則來處理引入。
一個簡單的例子
?php
class ClassAutoloader
{
public function __construct()
{
spl_autoload_register(array($this, ‘loader’));
}
public function loader($className)
{
$file = dirname(__FILE__) . ‘/’ . $className . ‘.php’;
if (is_file($file)) {
require $file;
}
}
}
$autoloader = new ClassAutoloader();
如何加載第三方類庫phpexcel的所有PHP文件
你只要加載主要的那個php文件就行了,其它的是按需加載的,是phpexcel操心的事
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243175.html