本文目錄一覽:
- 1、9個必須知道的實用PHP函數和功能
- 2、php中如何建立函數庫
- 3、怎麼調用Common.php裡面的公共函數
- 4、如何自定義公共函數以及存放位置
- 5、thinkphp3.2公共函數寫在哪
- 6、thinkphp common公共函數 命名
9個必須知道的實用PHP函數和功能
即使使用 PHP 多年 也會偶然發現一些未曾了解的函數和功能 其中有些是非常有用的 但沒有得到充分利用 並不是所有人都會從頭到尾一頁一頁地閱讀手冊和函數參考!
任意參數數目的函數
你可能已經知道 PHP 允許定義可選參數的函數 但也有完全允許任意數目的函數參數的方法 以下是可選參數的例子
以下為引用的內容
// function with optional arguments function foo($arg = $arg = ) {
echo “arg : $arg n”; echo “arg : $arg n”;
}
foo( hello world ); /* prints: arg : hello arg : world */
foo(); /* prints: arg : arg : */
現在讓我們看看如何建立能夠接受任何參數數目的函數 這一次需要使用 func_get_args() 函數
以下為引用的內容
// yes the argument list can be empty function foo() {
// returns an array of all passed arguments $args = func_get_args();
foreach ($args as $k = $v) { echo “arg” ($k+ ) “: $vn”; }
}
foo(); /* prints nothing */
foo( hello ); /* prints arg : hello */
foo( hello world again ); /* prints arg : hello arg : world arg : again */
使用 Glob() 查找文件
許多 PHP 函數具有長描述性的名稱 然而可能會很難說出 glob() 函數能做的事情 除非你已經通過多次使用並熟悉了它 可以把它看作是比 scandir() 函數更強大的版本 可以按照某種模式搜索文件
以下為引用的內容
// get all php files $files = glob( * php );
print_r($files); /* output looks like: Array ( [ ] = phptest php [ ] = pi php [ ] = post_output php [ ] = test php ) */
你可以像這樣獲得多個文件
以下為引用的內容
// get all php files AND txt files $files = glob( * {php txt} GLOB_BRACE);
lishixinzhi/Article/program/PHP/201311/21182
php中如何建立函數庫
Step 1 =
php的擴展模塊都放在 ext/ 目錄下,比如說 snmp模塊、mysql模塊。 我們要建立自己的模塊,就要在ext目錄下為自己的模塊建一個目錄。比如,我們要做一個分析config文件的模塊,命名為pconfig模塊(parse config的簡寫),需在ext下建立目錄pconfig。將我寫好的7個文件copy到該目錄下,另外需對主目錄下的configure和internal_functions.c作一些修改。
Step 2 =
Makefile.am Makefile.in
是模板文件,用戶執行configure時,會調用這兩個文件,生成編譯時所用的Makefile文件。修改時將小寫的pconfig換成你自己的模塊名,別忘了把大寫的PCONFIG也替換掉(不要告訴我你不會vi的替換語句)。config.m4也是執行configure將會調用的檢測腳本程序,以後我們來討論這些腳本程序的更深入的修改。現在你只需要把pconfig該成你的模塊就可以了。對config.h.stub和setup.stub也如法炮製。其實setup.stub也沒什麼用。
Step 3 =
php3-pconfig.h 頭文件中
extern php3_module_entry pconfig_module_entry;
#define pconfig_module_ptr pconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_ptr
這幾行定義了模塊的入口,將入口註冊到php後,php會通過模塊入口找到你寫的函數
下面幾個函數定義是用宏進行定義的,展開以後其實就是 php3_minit_pconfig , php3_rinit_pconfig ……分別在你的模塊初試化或結束時被調用,如果你的模塊很簡單,也就不需要這些定義了
extern PHP_MINIT_FUNCTION(pconfig);
extern PHP_RINIT_FUNCTION(pconfig);
extern PHP_MSHUTDOWN_FUNCTION(pconfig);
PHP_MINFO_FUNCTION(pconfig);
這是你的函數聲明,將來寫在php腳本語句中的函數名就是在PHP_FUNCTION中定義的名字。
PHP_FUNCTION(pconfig_test);
如果有多個,還可以繼續往下加
PHP_FUNCTION(pconfig_parsefile);
PHP_FUNCTION(pconfig_release); …….
Step 4 =
接下來我們看最重點的C代碼了
function_entry pconfig_functions[] = {
PHP_FE(pconfig_test, NULL)
{NULL, NULL, NULL}
};
定義的是你的函數的入口(前面我們提到過模塊的入口),按照格式將你在頭文件中定義的函數寫進去吧。注意,這是用宏定義的,不要管語法是否正確。以後我們具體討論這些宏的用法。
php3_module_entry pconfig_module_entry = {
“pconfig”, pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
註冊模塊的入口信息,比如模塊名,函數介面,初試化模塊將調用的函數等等,如果你的模塊不執行複雜操作的話,可以忽略掉他們,寫成
php3_module_entry pconfig_module_entry = {
“pconfig”, pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES
};
Step 5 =
寫你自己的函數
在頭文件和function_entry處,我們已經定義了自己的函數pconfig_test,現在我們就來實現pconfig_test的功能。就比如執行兩個數相加的和吧。
static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)
{ ……
}
PHP_FUNCTION(pconfig_test)
{
_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
當系統調用pconfig_test時,會調用你的_php3_pconfig_test函數,當然你也可以把_php3_pconfig_test里的內容直接寫在PHP_FUNCTION(pconfig_test)中,這樣做只是程序結構比較清晰。注意:不要將_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展開後實際上就是php3_pconfig_test!
Step 6 =
好了,現在我們開始修改configure,在echo $ac_n “checking for MySQL support””… $ac_c” 16的前面(當然,如果你熟悉configure的話,可以加在任何合適的地方)加上下面幾句話
if test “${with_pconfig+set}” = set; then
withval=”$with_pconfig”
# Add your lib in here
EXTRA_LIBS=”$EXTRA_LIBS”
# Add your include path in here
INCLUDES=”$INCLUDES”
EXT_SUBDIRS=”$EXT_SUBDIRS pconfig”
EXT_LIBS=”$EXT_LIBS pconfig/libphpext_pconfig.a”
EXTINFO_DEPS=”$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub”
EXT_STATIC=”$EXT_STATIC pconfig”
fi
修改internal_functions.c,在頭文件定義中加入#include “ext/pconfig/php3_pconfig.h”
在zend_module_entry數組中加入phpext_pconfig_ptr,
Step 7 =
從新configure,帶上需要的參數,不要忘記的是在參數里加入 –with-pconfig
Step 8 =
index.php3
? echo pconfig_test(123,678).”
“; ?
執行%php index.php3
810
怎麼調用Common.php裡面的公共函數
據個人理解,如何調用要看你這個public 函數是怎麼定義的,如果是定義的某個類的成員函數,你先要 include / require 引入類所在的單元文件,實例化該類,再調用這個函數就可以了。
如何自定義公共函數以及存放位置
註:本條為本人添加。公共函數位於 system/core/Common.php 文件中,大家可以在這裡定義自己的公共函數。
CodeIgniter 使用了一些全局定義的函數來完成操作,在任何情況下你都能夠使用這些函數。使用他們不需要載入任何類庫或輔助函數。
is_php(‘version_number’)
is_php() 判斷正在使用的PHP的版本號是否高於你所提供的 version_number 。
if (is_php(‘5.3.0’))
{
$str = quoted_printable_encode($str);
}
如果已安裝的PHP版本號等於或高於你所提供的版本號,本函數將返回布爾值 TRUE。如果安裝的PHP版本號低於你所提供的那個版本號,本函數將返回 FALSE。
is_really_writable(‘path/to/file’)
在Windows平台,is_writable()函數在實際沒有文件寫許可權時也返回真。那是因為,只有文件有隻讀屬性時,操作系統才向PHP報告為假。這個函數依靠對文件的先行寫入來判斷是否真的具有寫許可權。 通常情況下,只有在這個信息不可靠的平台上才推薦使用。
注:此函數也可用於判斷文件夾是否有可寫許可權。
if (is_really_writable(‘file.txt’))
{
echo “I could write to this if I wanted to”;
}
else
{
echo “File is not writable”;
}
config_item(‘item_key’)
儘管使用config_item()函數能夠取得單個配置信息,但是配置類是訪問這些信息的優選方式。更多信息請見類庫參考。
注:此函數獲取的是從config文件直接獲取的值,無法取得配置類 set_item() 函數變更後的值。
show_error(‘message’), show_404(‘page’), log_message(‘level’, ‘message’)
這些函數在錯誤處理中描述。
set_status_header(code, ‘text’);
允許你手動設置伺服器狀態頭(header)。例如:
set_status_header(401);
// 將header設置為: Unauthorized
單擊這裡 查看全部的header列表。
remove_invisible_characters($str)
這個函數能防止在ASCII字元之間插入空字元,如Java\0script.
html_escape($mixed)
利用此功能可以方便的使用htmlspecialchars()函數。它接受字元串和數組。有助於防止跨站腳本攻擊(XSS)。
thinkphp3.2公共函數寫在哪
如果你想整站都可以調用,那你就寫在thinkphp框架下的common/functions.php文件最後,如果你只想在前台調用,那你就先創建前台目錄,在前台目錄里下的common創建一個function.php文件,把公共函數寫在裡面既可。
thinkphp common公共函數 命名
載入common.php的代碼在框架中ThinkPHP/Lib/Core/Thinkphp.class.php文件是固定的。
……
// 載入項目公共文件
if(is_file(COMMON_PATH.’common.php’)) {
include COMMON_PATH.’common.php’;
// 編譯文件
if(!APP_DEBUG) $compile .= compile(COMMON_PATH.’common.php’);
}
……..
但是Thinkphp提供了,LOAD_EXT_FILE配置文件參數,可以在項目配置文件中定義LOAD_EXT_FILE參數,
例如:
“LOAD_EXT_FILE”=”user,db”
其次在項目Common目錄中新建user.php與db.php文件.
通過上面的設置,就會執行過程中自動載入項目公共目錄下面的擴展函數庫文件user.php和db.php,這樣就可以直接在項目中調用擴展函數庫user.php和db.php中的函數了,而且擴展函數庫的函數修改是實時生效的。
手動載入
如果你的函數只是個別模塊偶爾使用,則不需要採用自動載入方式,可以在需要調用的時候採用load方法手動載入,方式如下:
load(“@.user”)
@.user表示載入當前項目的user函數文件,這樣就可以直接user.php擴展函數庫中的函數了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/259372.html