奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

php語言

php如何在一個類中引入另外一個類

時間:2024-09-07 16:43:20 php語言 我要投稿
  • 相關推薦

php如何在一個類中引入另外一個類

  有時候需要在一個類中調用另外一個類里面的方法,然后另外一個類又需要調用當前類的方法,怎么辦呢?下面是具體的介紹。希望對大家有用,更多內容請關注應屆畢業生網!

  可以直接引入類對象的方式調用另外一個類的方法示例如下(傳值方式)

  class a {

  function b($obj) {

  $obj->test();

  }

  }

  class b {

  function test() {

  echo 'test';

  }

  }

  $a = new a();

  $b->b(new 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
<?php
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_dump(array_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_FUNCTION(array_concat)
{
    zval *arr, *prefix, *entry, *prefix_entry, value;
    zend_string *string_key, *result;
    zend_ulong num_key;
 
    if (zend_parse_parameters(ZEND_NUM_ARGS(), "aa", &arr, &prefix) == FAILURE) {
        return;
    }
 
    array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(arr)));
     
    ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(arr), num_key, string_key, entry) {
        if (string_key && zend_hash_exists(Z_ARRVAL_P(prefix), string_key)) {
            prefix_entry = zend_hash_find(Z_ARRVAL_P(prefix), string_key);
            if (Z_TYPE_P(entry) == IS_STRING && prefix_entry != NULL && Z_TYPE_P(prefix_entry) == IS_STRING) {
                result = strpprintf(0, "%s%s", Z_STRVAL_P(prefix_entry), Z_STRVAL_P(entry));
                ZVAL_STR(&value, result);
                zend_hash_update(Z_ARRVAL_P(return_value), string_key, &value);
            }  
        } else if (string_key == NULL && zend_hash_index_exists(Z_ARRVAL_P(prefix), num_key)){
            prefix_entry = zend_hash_index_find(Z_ARRVAL_P(prefix), num_key);
            if (Z_TYPE_P(entry) == IS_STRING && prefix_entry != NULL && Z_TYPE_P(prefix_entry) == IS_STRING) {
                result = strpprintf(0, "%s%s", Z_STRVAL_P(prefix_entry), Z_STRVAL_P(entry));
                ZVAL_STR(&value, result);
                zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, &value);
            }
        } else if (string_key) {
            zend_hash_update(Z_ARRVAL_P(return_value), string_key, entry);
            zval_add_ref(entry);
        } else  {
            zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry);
            zval_add_ref(entry);
        }
    }ZEND_HASH_FOREACH_END();
 
}


  代碼說明

  PHP中的數組本質上就是一個哈希。

  對于哈希處理的方法主要集中在Zend/zend_hash.h中。

  對于數組的操作方法主要集中在Zend/API.h。數組的方法其實就是對哈希處理方法的一層包裝。

  數組操作的方法主要是以add_assoc_ 和 add_index_開頭的一些列方法。

  下面是代碼中涉及的一些方法。

  zend_hash_num_elements獲取數組的元素個數。

  array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(arr))); 初始化一個數組。在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_ref(entry); 給數組的值,增加一次引用計數。zend_hash_update方法只自動給string_key自動增加了一次引用計數。數組return_value共用數組arr的值。因此,我們需要手動增加一次引用計數。


【php如何在一個類中引入另外一個類】相關文章:

php編寫的一個E-mail驗證類08-26

PHP類與構造函數07-01

PHP排序算法類講解07-18

php實現圖片縮放功能類08-17

PHP編程:類和對象、方法調用09-26

php備份數據庫類的方法09-04

php學習筆記:類的聲明與對象實例化05-14

PHP學習:QRCode PHP生成二維碼類庫10-28

用JAVA編寫一個隊列類實例10-09

PHP如何自定義一個函數09-19

主站蜘蛛池模板: 县级市| 德保县| 晋江市| 万载县| 永福县| 兴山县| 石首市| 元江| 冀州市| 青铜峡市| 苍南县| 政和县| 垫江县| 南昌县| 鄱阳县| 呈贡县| 营口市| 宁安市| 建始县| 林周县| 天祝| 当涂县| 双桥区| 綦江县| 沙洋县| 辛集市| 龙江县| 丹东市| 台湾省| 托克逊县| 白沙| 富川| 隆林| 黔西县| 桃源县| 新泰市| 虹口区| 新巴尔虎右旗| 万载县| 临西县| 襄城县|