var_export 與 var_dump的不一樣

var_export & var_dump 不一樣

  • var_dump -- 輸出php

  • var_export -- 輸出或返回一個變量的字符串表示html

此函數返回關於傳遞給該函數的變量的結構信息,它和 var_dump() 相似,不一樣的是其返回的表示是合法的 PHP 代碼。數組

比較

比較:var_dump 直接輸出,若是 var_export,不設置第2個參數爲true的話,也是直接輸出,輸出和var_dump差很少;函數

可是若是 var_export 第2個參數設置爲true的話,就不會輸出了,而是返回字符串的變量的表示。若是要輸出的話,用echo 如:code

$arr = [1,2,3];
$var = var_export($arr, true);
echo $var;

var_dump 只輸出,var_export 不只能夠輸出,還能夠把變量字符串的表示xml

問題發現

在跟蹤yratings_get_targets的時候,htm

error_log(var_export(yblog_mspconfiginit("ratings"),true));

總是打印出yblog_mspconfiginit(「ratings」)的返回是NULLblog

致使我覺得是沒法創建和DB的鏈接,走錯路了一天。字符串

最後才發現,這是var_export和var_dump的區別之一get

這就是:

問題緣由 var_export必須返回合法的php代碼, 也就是說,var_export返回的代碼,能夠直接看成php代碼賦值個一個變量。 而這個變量就會取得和被var_export同樣的類型的值

可是, 當變量類型爲resource的時候, 是沒法簡單copy複製的,因此, 當var_export的變量是resource類型時, var_export會返回NULL 實例

$res = yblog_mspconfiginit("ratings");
var_dump($res);
var_export($res);

結果:

resource(1) of type (yahoo_yblog)
NULL

再好比:

$res = fopen('status.html', 'r');
var_dump($res);
var_export($res);

結果:

resource(2) of type (stream)
NULL

var_export,函數的第二個參數設置爲 TRUE,從而返回變量的表示, 不設置第2個參數,效果則和var_dump()同樣,純是輸出.

應用:把數組寫入文件

//將整個文件讀入一個字符串
$xmldata = file_get_contents("php://input");
$xmldata = (array)simplexml_load_string($xmldata);

//var_export,函數的第二個參數設置爲 TRUE,從而返回變量的表示
$arr = var_export($xmldata,TRUE);

//file_get_contents: 將一個字符串寫入文件。該函數將返回寫入到文件內數據的字節數,失敗時返回FALSE
$ret = file_put_contents('output.log', $arr);
if (false == $ret) {
	exit("寫入失敗");
}

echo $data;

output.log 內容以下

array (
  'sha1' => '111',
  'user_id' => '222',
  'album_id' => '333',
  'album_name' => '444',
  'tags' => '555',
  'title' => '666',
  'content' => '777',
  'type' => '8888',
  'copyright' => '9999',
)

file_put_content 不能直接將數組寫入文件,而是先把數組變成字符串,再寫入。var_export,第2個參數設置爲true,就是

相關文章
相關標籤/搜索