<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            php語言

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

            時間:2025-02-13 00:20:38 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如何在一個類中引入另外一個類】相關文章:

            在一個類中訪問另一個類的方法05-16

            一個漂亮的php驗證碼類10-04

            PHP中FTP操作類代碼09-25

            PHP中的類與對象入門知識09-05

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

            PHP學習:PHP拼音類10-08

            PHP use類文件中的命名空間問題08-25

            php中抽象類與抽象方法的用法07-15

            php分頁類代碼09-08

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看