php按需加載,apache加載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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:54
下一篇 2024-12-12 12:54

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • QML 動態加載實踐

    探討 QML 框架下動態加載實現的方法和技巧。 一、實現動態加載的方法 QML 支持從 JavaScript 中動態指定需要加載的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Apache配置Python環境

    Apache是一款流行的Web服務器軟件,事實上,很多時候我們需要在Web服務器上使用Python程序做為數據處理和前端網頁開發語言,這時候,我們就需要在Apache中配置Pyth…

    編程 2025-04-28
  • 類加載的過程中,準備的工作

    類加載是Java中非常重要和複雜的一個過程。在類加載的過程中,準備階段是其中一個非常重要的步驟。準備階段是在類加載的連接階段中的一個子階段,它的主要任務是為類的靜態變量分配內存,並…

    編程 2025-04-28
  • Lazarus LoadLibrary:DLL動態鏈接庫的加載和使用

    本文將從以下幾個方面介紹Lazarus中LoadLibrary和FreeLibrary函數的使用方法: 一、簡介 LoadLibrary和FreeLibrary是Windows動態…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Apache偽靜態配置Java

    本文將會從多個角度闡述如何在Apache中正確偽裝Java應用程序,實現URL的靜態化,提高網站的SEO優化和性能。以下是相關的配置和代碼實例。 一、RewriteEngine的配…

    編程 2025-04-27

發表回復

登錄後才能評論