導航:首頁 > 編程語言 > php宏定義函數

php宏定義函數

發布時間:2022-12-24 02:47:32

Ⅰ 在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定義常量排除了程序之間的不安全性.

閱讀全文

與php宏定義函數相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163