Ⅰ 在php中如何正確創建函數
Step 1 =>
php的擴展模塊都放在 ext/ 目錄下,比如說 snmp模塊、mysql模塊。 我們要建立自己的模塊,就要在ext目錄下為自己的模塊建一個目錄。比如,我們要做一個分析config文件的模塊,命名為pconfig模塊(parse config的簡寫),需在ext下建立目錄pconfig。將我寫好的7個文件到該目錄下,另外需對主目錄下的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_mole_entry pconfig_mole_entry;
#define pconfig_mole_ptr &pconfig_mole_entry
#define phpext_pconfig_ptr pconfig_mole_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_mole_entry pconfig_mole_entry = {
"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
注冊模塊的入口信息,比如模塊名,函數介面,初試化模塊將調用的函數等等,如果你的模塊不執行復雜操作的話,可以忽略掉他們,寫成
php3_mole_entry pconfig_mole_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" 1>&6的前面(當然,如果你熟悉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_mole_entry數組中加入phpext_pconfig_ptr,
Step 7 =>
從新configure,帶上需要的參數,不要忘記的是在參數里加入 --with-pconfig
Step 8 =>
index.php3
<? echo pconfig_test(123,678)."
"; ?>
執行%>php index.php3
810
Ⅱ php數組怎麼導入定義函數
1、首先新建一個php文件,命名為test.php,用於講解php如何把數組作為參數傳遞給函數。
2、其次在test.php文件中,自定義一個函數myfunc,在函數內,使用foreach遍歷數組,並輸出元素值。
3、最後在test.php文件中,定義一個數組,用於函數的參數,並導入。
Ⅲ 宏的定義是什麼
宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義不可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
(10)宏定義不存在類型問題,它的參數也是無類型的。
Ⅳ 在php定義好的函數,怎麼在HTML中調用!最好給個例子。
HTML怎麼能調用php中的函數呢
不過php程序可以包含html語句,比如
<?php
function div(){
?>
<div>sdfsdf</div>
<?php
}
?>
這樣在php中每次調用<?php div();?>就會輸出一個div, 等於
<?php
echo '<div>sdfsdf</div>';
?>
Ⅳ 用PHP語言編寫一個自定義函數,該函數可以實現判斷一個數是否是整數的功能.
厄,玩什麼要自定一個函數呢?
php 有自帶函數 is_int($num) 這個可以判斷一個數是否為整數!!
如果你一定需要自己寫一個,我可以幫你,原理就是用正則一下搞定,需要嗎?
Ⅵ c語言宏定義函數如何調用(裡面含參數可以當函數用嗎)
直接調用即可。如下示例:
#include<stdio.h>#definesum(b,c){intd=0;d=b+c;printf("兩者的和:%d ",d);}intmain(){intx=0,y=0;scanf("%d%d",&x,&y);sum(x,y);return0;}若是普通函數,則通過遞歸,可取的最大值,時間復雜度為O(n)。但若是宏函數,則宏展開為( a[n]>max(n-1)?a[n]:max(n-1) ),其中max(n-1)被調用了兩遍,這樣依此遞歸下去,時間復雜度會很高。
Ⅶ 深入php define()函數以及defined()函數的用法詳解
The
define()
function
defines
a
constant.
define()函數的作用是:定義一個常量。
Constants
are
much
like
variables,
except
for
the
following
differences:
常量[constant]與變數[variable]有很多相似的地方,因此,很容易混淆;下面,我們列舉一下常量[constant]與變數[variable]之間的不同點:
•A
constant's
value
cannot
be
changed
after
it
is
set
一個常量值在指定之後就不可以更改;
•Constant
names
do
not
need
a
leading
dollar
sign
($)
設置常量時,不需要在前面加上「$」符號;
•Constants
can
be
accessed
regardless
of
scope
常量可以被所有范圍的域訪問;
•Constant
values
can
only
be
strings
and
numbers
常量的值只能是「字元串[string]」和「數字[number]」;
Syntax
語法
復制代碼
代碼如下:
define(name,value,case_insensitive)
Ⅷ 宏定義函數
這道題輸出3個數字, 分別是1的三次方; 4的三次方; 和7的三次方
printf("%d\n",b(i++));
上面這一句, 宏展開後, 等價於
printf(%d, ((x++)*(x++)*(x++)));
考慮到 後++ 的特性. 等價於
printf(%d, x*x*x)
x += 3; // ++三次
第一次循環, 輸出1的三次方
第二次循環, 輸出1+3的三次方
第三次循環, 輸出1+3+3的三次方
第四次循環, 因為1+3+3+3大於8, 所以跳出, 不輸出
同樓上幾位仁兄, 宏裡面 ++ --這樣的復雜操作還是不要用的好, 運氣不好會出現你一整天都找不出原因的莫名其妙的運行錯誤.
Ⅸ PHP中,function是什麼意思有什麼作用
function 就是自定義函數
如:
function jia($a) {
$b = $a+10;
return $b;
}
以上就是一個自定義函數,下面看看怎麼使用它
echo jia(『10』);
顯示結果為20 //這里jia就是自定義的函數名,這樣只要給$a任何數字返回的結果都為+10的結果,這樣就是自定義了一個函數,這個例子是很簡單的~ 不過通過自定義函數你會發現一切變得更好實現,加油 O(∩_∩)O
Ⅹ php中const和define的區別
define部分:
宏不僅可以用來代替常數值,還可以用來代替表達式,甚至是代碼段。(宏的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。)
宏的語法為:
#define 宏名稱 宏值
作為一種建議和一種廣大程序員共同的習慣,宏名稱經常使用全部大寫的字母。
利用宏的優點:
1)讓代碼更簡潔明了
當然,這有賴於你為宏取一個適當的名字。一般來說,宏的名字更要注重有明確直觀的意義,有時寧可讓它長點。
2)方便代碼維護
對宏的處理,在編譯過程中稱為「預處理」。也就是說在正式編譯前,編譯器必須先將代碼出現的宏,用其相應的宏值替換,這個過程有點你我在文字處理軟體中的查找替換。所以在代碼中使用宏表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的類型。
const部分
常量定義的格式為:
const 數據類型 常量名 = 常量值;
而const定義的常量具有數據類型,定義數據類型的常量便於編譯器進行數據檢查,使程序可能出現錯誤進行排查。常量必須一開始就指定一個值,然後,在以後的代碼中,我們不允許改變此常量的值。
兩者之間的區別:
內存空間的分配上。define進行宏定義的時候,不會分配內存空間,編譯時會在main函數里進行替換,只是單純的替換,不會進行任何檢查,比如類型,語句結構等,即宏定義常量只是純粹的置放關系,如#define null 0;編譯器在遇到null時總是用0代替null它沒有數據類型(還有疑問請找C語言書籍看預處理部分或者看MSDN.而const定義的常量具有數據類型,定義數據類型的常量便於編譯器進行數據檢查,使程序可能出現錯誤進行排查,所以const與define之間的區別在於const定義常量排除了程序之間的不安全性.