本文目錄一覽:
- 1、php獲取結果集的幾個方法
- 2、php 函數運行完了 不就釋放了嗎,還要等腳本結束
- 3、關於php中釋放資源mysql_free_result函數,釋放資源是什麼意思,是不是把mysql_query結果集中的值清空?
- 4、Thinkphp 是否需要手動釋放結果集?
- 5、PHP管理內存函數 memory_get_usage()使用介紹
php獲取結果集的幾個方法
php獲取查詢結果集有4個函數方法,此處對它們進行綜合比較。
● mysql_result():優點在於使用方便;而缺點在於功能少,一次調用只能獲取結果數據集中的一行記錄,對較大型的資料庫效率較低。
● mysql_fetch_row():優點在於執行效率在4種方法中最高;不足在於只能用數字作為屬性索引來獲得屬性值,在使用時非常容易出現混淆。
● mysql_fetch_array():執行效率同樣很高,同mysql_fetch_row()相差無幾,並且可以用屬性名方式直接獲取得屬性值,因此,在實際應用中最常用。
● mysql_fetch_object():採用了面向對象的思想,在設計思路上更為先進,如果讀者習慣於面向對象的思路來寫程序,則會很自然的選擇它。其次,該方法的優點還體現在,對於結構較為複雜的數據結果,在邏輯上顯得更為清晰。
php 函數運行完了 不就釋放了嗎,還要等腳本結束
首先說下,題主這個問題不是函數釋放的問題
問題在於 require_once
第一次:在get_config內 第一次 引入 conf.php 賦值給 $conf , 此時 $conf 得到期望 數組 ,沒有任何問題。
(註:此時已經在本次運行環境中引入了conf.php)
第二次:在get_config內再次嘗試引入 conf.php 此時 require_once 會檢測到運行環境中已經引入了該文件,此時返回值為 true 對 true 進行取值 肯定是 null
題主正確的做法是把 require_once 放入全局GLOBALS內,在 get_config 內引入全局變數即可。
修改後的代碼:
a.php
$GLOBALS[‘conf’] = require_once ‘conf.php’;
function get_config($key, $default = null){
return isset($GLOBALS[‘conf’][$key])
? $GLOBALS[‘conf’][$key]
: $default;
}
var_dump(get_Config(‘name’));
var_dump(get_Config(‘age’));
— 共有 1 條評論 —
hphper(註:此時已經在本次運行環境中引入了conf.php) 這句話,這個引入是在函數里引入,函數執行完了後在這個運行環境里有引入嗎,如果在這個運行文件里有引入,那麼我直接列印 conf.php里的$config應該有值,但是沒有 也就是說在全局裡並沒有引入 那麼就只在函數里引入了,為什麼第一次的函數執行 會對第二次的執行有影響呢 (3年前)
評論(1)| 引用此答案| 舉報 (2014-06-14 13:12)
樑上有木樑上有木 3年前
題主這個config的格式不需要把引入的文件賦值,只需要require_once就可以了
a.php
1 function get_config($key){
2 require_once ‘conf.php’;
3 return $conf[$key];
4 }
5 echo get_Config(‘name’);
6
7 echo get_Config(‘age’);
conf.php
1 $config=array(
2 ‘name’=’hk’,
3 ‘age’=’22’
5 );
評論(0)| 引用此答案| 舉報 (2014-06-14 15:34)
hphperhphper 3年前
引用來自「樑上有木」的評論
題主這個config的格式不需要把引入的文件賦值,只需要require_once就可以了
a.php
1 function get_config($key){
2 require_once ‘conf.php’;
3 return $conf[$key];
4 }
5 echo get_Config(‘name’);
6
7 echo get_Config(‘age’);
conf.php
1 $config=array(
2 ‘name’=’hk’,
3 ‘age’=’22’
5 );
function get_config($key){
require_once ‘conf.php’;
return $conf[$key];
}
里$conf是啥,
是a.php里的 $config吧
就算是
第二次調用 也是不行的
評論(0)| 引用此答案| 舉報 (2014-06-14 16:46)
TuesdayTuesday 3年前
終於明白為什麼php 的排名日落千丈了.
— 共有 1 條評論 —
hphper是我這樣的小白 多了是嗎? (3年前)
評論(1)| 引用此答案| 舉報 (2014-06-14 18:43)
南湖船老大南湖船老大 3年前
各種亂入,各種小白啊,貴圈太亂了。。。
都是想當然地寫代碼。。。require_once 你賦值幹嘛。。。而且你這種寫法很粗糙,也很dirty,你造嗎?
推薦寫法:
$config = call_user_func(function() {
return include ‘config.php’;
});
— 共有 3 條評論 —
南湖船老大回復 @hphper : 變數可能被污染,用匿名函數和閉包就避免了這種情況 (3年前)
hphper為什麼粗糙,dirty了,怎麼判斷粗糙不粗糙呢 (3年前)
hphper哦,看來進步空間還很大啊 (3年前)
評論(3)| 引用此答案| 舉報 (2014-06-14 19:46)
hphperhphper 3年前
引用來自「D哥」的評論
首先說下,題主這個問題不是函數釋放的問題
問題在於 require_once
第一次:在get_config內 第一次 引入 conf.php 賦值給 $conf , 此時 $conf 得到期望 數組 ,沒有任何問題。
(註:此時已經在本次運行環境中引入了conf.php)
第二次:在get_config內再次嘗試引入 conf.php 此時 require_once 會檢測到運行環境中已經引入了該文件,此時返回值為 true 對 true 進行取值 肯定是 null
題主正確的做法是把 require_once 放入全局GLOBALS內,在 get_config 內引入全局變數即可。
修改後的代碼:
a.php
$GLOBALS[‘conf’] = require_once ‘conf.php’;
function get_config($key, $default = null){
return isset($GLOBALS[‘conf’][$key])
? $GLOBALS[‘conf’][$key]
: $default;
}
var_dump(get_Config(‘name’));
var_dump(get_Config(‘age’));
謝謝!,我在函數里用靜態變數也可以,您這也是一種方法
我仍不理解的是:第二次 執行時,既然它已經檢測到 已經引入了該文件,那我直接用conf.php 里的 $config為啥也不行啊
我最不明白的是 函數里的 require_once 對正在執行這個函數的文件的影響,下次再require_once的時候 為啥受上一次函數的影響
關於php中釋放資源mysql_free_result函數,釋放資源是什麼意思,是不是把mysql_query結果集中的值清空?
mysql查詢結果句柄會消耗內存。為了節約內存,在使用完畢後可以手動釋放。不過一般情況下不需要這麼做,程序結束會自動釋放的。
這裡的$pageCount變數存在。因為釋放mysql句柄$res和$pageCount無關。
以下方法可以釋放$pageCount:
unset($pageCount);
望採納,謝謝支持!
Thinkphp 是否需要手動釋放結果集?
不需要手動釋放,當執行完這個頁面的腳本後,$res這個變數會自動銷毀,資料庫連接會在語句執行完成後斷開。
例如,在任一控制器的任一方法內寫入下列代碼
if(I(“get.a”)){
$a = I(“get.a”);
dump($a);
}else{
dump($a);
}
第一次打開這個頁面時加上a=1的參數,會輸出1,然後把參數去掉,會輸出空或未定義的變數。
PHP管理內存函數 memory_get_usage()使用介紹
下面是PHP
memory_get_usage()使用示例:
複製代碼
代碼如下:
echo
memory_get_usage(),
‘br
/’;
//143952
$tmp
=
str_repeat(”,
4000);
echo
memory_get_usage(),
‘br
/’;
//232048
unset($tmp);
echo
memory_get_usage();
//143952
上面的程序後面的注釋代表了它們的輸出(單位為
byte(s)),也就是當時
PHP
腳本使用的內存(不含
memory_get_usage()
函數本身佔用的內存)
由上面的例子可以看出,要想減少內存的佔用,可以使用
PHP
unset()
函數把不再需要使用的變數刪除。類似的還有:PHP
mysql_free_result()
函數,可以清空不再需要的查詢資料庫得到的結果集,這樣也能得到更多可用內存。
PHP
memory_get_usage()還可以有個參數,$real_usage,其值為布爾值。默認為
FALSE,表示得到的內存使用量不包括該函數(PHP
內存管理器)佔用的內存;當設置為
TRUE
時,得到的內存為包括該函數(PHP
內存管理器)佔用的內存。
所以在實際編程中,可以用PHP
memory_get_usage()比較各個方法佔用內存的高低,來選擇使用哪種佔用內存小的方法。
常用的檢測:
用microtime函數就可以分析程序執行時間
memory_get_usage可以分析內存佔用空間
SQL的效率可以使用打開慢查詢查看日誌分析
SQL
找到有瓶頸的使用EXPLAIN
來分析
原創文章,作者:XCNV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148436.html