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);
第乙個引數a
、b
、c
可以視為佔位符,內部要用到,不重複即可。
第二個引數支援以下型別:
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 新增的內容,按官方的說法是 的備用選項。雖然 缺少 中的一些功能,但它執行時所花費的時間和使用的記憶體量均比 要少,且支援更好的除錯...