PHP CPP開發擴充套件(三)

2022-02-01 00:46:33 字數 3006 閱讀 7505

php-cpp是乙個用於開發php擴充套件的c++庫。本節講解php函式形參相關的實現。

有時候,我們需要指定函式的形參是陣列或者指定的,那麼在php-cpp裡是否可以指定函式的引數型別呢?答案是可以的。

示例:

/**

* date: 2018/7

*/#include void example(php::parameters ¶ms)

extern "c" );

return myextension;

}}

我們使用php::byval()進行指定函式型別,示例裡分別指定為numeric和自定義類型別。

我們再看一下php::byval()原型:

/**

* constructor

* @param name name of the parameter

* @param type parameter type

* @param required is this parameter required?

*/byval(const char *name, php::type type, bool required = true);

第乙個引數abc可以視為佔位符,內部要用到,不重複即可。

第二個引數支援以下型別:

php::type::null

php::type::numeric

php::type::float

php::type::bool

php::type::array

php::type::object

php::type::string

php::type::resource

php::type::constant

php::type::constantarray

php::type::callable

這些型別其實就是php支援的變數型別。

最後乙個引數可以用來設定引數是否可選,預設必選。如果將其設定為true,則在沒有此引數的情況下呼叫函式時,php將觸發錯誤。

我們以sum_n函式為例:

extension.add("sum_n", );
如果使用的時候不給引數,就會php warning:

php warning:  sum_n() expects at least 1 parameter(s), 0 given in /media/d/work/php-ext/phpcpp/phpcpp_helloworld/test.php on line 4
php::byval()還有一種原型:

/**

* constructor

* @param name name of the parameter

* @param classname name of the class

* @param nullable can it be null?

* @param required is this parameter required?

*/byval(const char *name, const char *classname, bool nullable = false, bool required = true);

多了個nullable:是否可以用null來代替引數。比如:

extension.add("say_class", );
這個say_class方法裡,我們指定形參為datetime型別,可以使用null替代,引數必選。如果nullable改為false,這時候就必須傳指定型別datetime了。

有時候我們需要支援函式直接修改原來的變數值,就需要使用引用的方式傳參了。php-cpp也提供了php::byref進行支援。

/**

* constructor

* @param name name of the parameter

* @param type parameter type

* @param required is this parameter required?

*/byref(const char *name, php::type type, bool required = true);

示例:

/**

* date: 2018/7

*/#include void swap(php::parameters ¶ms)

extern "c" );

return myextension;

}}

我們使用test.php進行測試:

<?php

// define two variables

$a = 1;

$b = 2;

// 交換變數

swap($a, $b);

// 下面使用錯誤,僅支援變數引用

//swap(10,20); //會觸發php fatal error: only variables can be passed by reference

var_dump($a, $b);

?>

(未完待續)

想第一時間獲取最新動態,歡迎關注關注飛鴻影的部落格(fhyblog),不定期為您呈現技術乾貨。

PHP CPP開發擴充套件(三)

php cpp是乙個用於開發php擴充套件的c 庫。本節講解php函式形參相關的實現。有時候,我們需要指定函式的形參是陣列或者指定的,那麼在php cpp裡是否可以指定函式的引數型別呢?答案是可以的。示例 date 2018 7 include void example php parameters...

PHP CPP開發擴充套件(二)

php cpp是乙個用於開發php擴充套件的c 庫。本節講解php輸出和函式的實現。上面的helloworld示例裡,我們使用php out進行輸出,並使用了std endl換行重新整理緩衝。php out變數其實是std ostream類的乙個例項,支援php中設定的所有輸出緩衝。它與php指令碼...

UWP開發入門(三) x Bind 擴充套件標記

原文 uwp開發入門 三 擴充套件標記 上週打爐石打得太晚 忘記更新了,本週補上。本篇我們講一下擴充套件標記。擴充套件標記也是windows 10 uinversal 新增的內容,按官方的說法是 的備用選項。雖然 缺少 中的一些功能,但它執行時所花費的時間和使用的記憶體量均比 要少,且支援更好的除錯...