php引入类的位置,php如何在一个类中引入另外一个类
有時候需要在一個類中調用另外一個類里面的方法,然后另外一個類又需要調用當前類的方法,怎么辦呢?下面是具體的介紹。希望對大家有用,更多內容請關注應屆畢業生網!
可以直接引入類對象的方式調用另外一個類的方法示例如下傳值方式
class a {
function b$obj {
$obj->test;
}
}
class b {
function test {
echo 'test';
}
}
$a = new a;
$b->bnew b;
繼承的方式,如果子類中定義了相同的方法 將會覆蓋父類的方法
class b {
function __construct{
}
function testb{
echo 'test';
}
}
class a extends b {
function __construct{
parent::testb;
//or like this
$this->testb;
}
//重復定義 將會覆蓋
function testb{
echo 123;
}
}
$a = new a;
(拓展閱讀)PHP7擴展開發之數組處理
前言:這次,我們將演示如何在PHP擴展中如何對數組進行處理。要實現的PHP代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function array_concat$arr,
$prefix{
foreach$arr
as $key => $val{
if
isset$prefix[$key]
&&
is_string$val
&&
is_string$prefix[$key]
{
$arr[$key]
= $prefix[$key].$val;
}
}
return
$arr;
}
$arr = array
0
=> '0',
1
=> '123',
'a'
=> 'abc',
;
$prefix = array
1
=> '456',
'a'
=> 'def',
;
var_dumparray_concat$arr,
$prefix;
?>
把兩個數組,相同key的字符串值拼接。
代碼奉上:
基礎代碼
這個擴展,我們將在say擴展上增加 array_concat 方法。say擴展相關代碼大家請看這篇文章。PHP7擴展開發之hello word 文中已經詳細介紹了如何創建一個擴展和提供了源碼下載。
實現array_concat方法
array_concat方法的PHP擴展源碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
PHP_FUNCTIONarray_concat
{
zval
*arr, *prefix, *entry, *prefix_entry, value;
zend_string
*string_key, *result;
zend_ulong
num_key;
if
zend_parse_parametersZEND_NUM_ARGS, "aa",
&arr, &prefix == FAILURE {
return;
}
array_init_sizereturn_value,
zend_hash_num_elementsZ_ARRVAL_Parr;
ZEND_HASH_FOREACH_KEY_VALZ_ARRVAL_Parr,
num_key, string_key, entry {
if
string_key && zend_hash_existsZ_ARRVAL_Pprefix, string_key {
prefix_entry
= zend_hash_findZ_ARRVAL_Pprefix, string_key;
if
Z_TYPE_Pentry == IS_STRING && prefix_entry != NULL && Z_TYPE_Pprefix_entry == IS_STRING {
result
= strpprintf0, "%s%s",
Z_STRVAL_Pprefix_entry, Z_STRVAL_Pentry;
ZVAL_STR&value,
result;
zend_hash_updateZ_ARRVAL_Preturn_value,
string_key, &value;
}
}
else if string_key == NULL && zend_hash_index_existsZ_ARRVAL_Pprefix, num_key{
prefix_entry
= zend_hash_index_findZ_ARRVAL_Pprefix, num_key;
if
Z_TYPE_Pentry == IS_STRING && prefix_entry != NULL && Z_TYPE_Pprefix_entry == IS_STRING {
result
= strpprintf0, "%s%s",
Z_STRVAL_Pprefix_entry, Z_STRVAL_Pentry;
ZVAL_STR&value,
result;
zend_hash_index_updateZ_ARRVAL_Preturn_value,
num_key, &value;
}
}
else if string_key {
zend_hash_updateZ_ARRVAL_Preturn_value,
string_key, entry;
zval_add_refentry;
}
else? {
zend_hash_index_updateZ_ARRVAL_Preturn_value,
num_key, entry;
zval_add_refentry;
}
}ZEND_HASH_FOREACH_END;
}
代碼說明
PHP中的數組本質上就是一個哈希。
對于哈希處理的方法主要集中在Zend/zend_hash.h中。
對于數組的操作方法主要集中在Zend/API.h。數組的方法其實就是對哈希處理方法的一層包裝。
數組操作的方法主要是以add_assoc_ 和 add_index_開頭的一些列方法。
下面是代碼中涉及的一些方法。
zend_hash_num_elements獲取數組的元素個數。
array_init_sizereturn_value, zend_hash_num_elementsZ_ARRVAL_Parr; 初始化一個數組。在PHP擴展中,我們是通過return_value這個變量設置方法的返回值。因此,我們直接修改這個return_value變量即可。感興趣的話,可以把宏方法PHP_FUNCTION展開看下。
PHP7提供了一套宏方法用于遍歷哈希和對哈希進行操作。這些宏方法主要放在Zend/zend_hash.h文件中。如,代碼中的ZEND_HASH_FOREACH_KEY_VAL就是一個變量哈希的宏。是不是和PHP代碼中的foreach有點像?
在這里我們把代碼中用到的哈希相關的.方法做下整理說明:
ZEND_HASH_FOREACH_KEY_VAL 和 ZEND_HASH_FOREACH_END 配合使用,實現foreach的效果。
zend_hash_exists 檢測指定的key在哈希中是否存在。key為字符串。
zend_hash_index_exists 檢測指定的key在哈希中是否存在。key為數字。
zend_hash_find 根據key查找指定的值。key為字符串。
zend_hash_index_find 根據key查找指定的值。key為數字。
zend_hash_update 更新指定key的值。key為字符串。
zend_hash_index_update 更新指定key的值。key為數字。
基本上有這些方法,你就可以對數組進行一些基本操作了。方法命名也很有規律,key為字符串和數字提供了兩套。
zval_add_refentry; 給數組的值,增加一次引用計數。zend_hash_update方法只自動給string_key自動增加了一次引用計數。數組return_value共用數組arr的值。因此,我們需要手動增加一次引用計數。
總結
以上是生活随笔為你收集整理的php引入类的位置,php如何在一个类中引入另外一个类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学生成绩管理系统python课程设计,简
- 下一篇: linux 下进入oracle,linu