簡體   English   中英

如何使用PHP類擴展?

[英]How to use PHP class extends?

題 :

我無法弄清楚如何使用PHP中擴展的類...即使閱讀php.net網站和一些示例,也有一些我無法理解或遺漏的東西!

你能告訴我我在做什么錯嗎?

Api.php

class Api
{

    public static $action = '';


#    public function __construct()
#    {
#    }

    public function actionCaller ($action,$args=NULL)
    {
        return self::$action_($args);
    }
}

ApiForum.php

class ApiForum extends Api
{

    #private static $forum;

    public function __construct()
    {
        #self::$forum = new Api();
    }

    private function getPost ($args)
    {
        echo 'executed.';
        #return "get forum post $args";
    }

}

test.php的

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);


require_once('config.php');
require_once('classes/_Autoload_.php');


echo Api::actionCaller('forum')->getPost();

結果 :

PHP Fatal error:  Call to a member function getPost() on a non-object in /var/www/html/api.example.com/test.php on line 10

請和我謙虛;)

CL

回答:

好吧,現在正在工作! 多虧了所有...問題不止一個,這里是結果:

Api.php

class Api
{

#    public function __construct()
#    {
#    }


    public function actionCaller ($action,$args=NULL)
    {
        return self::$action($args);
    }

    public function forum ()
    {
        return new ApiForum();
    }


}

ApiForum.php

class ApiForum extends Api
{

#    public function __construct()
#    {
#    }



    public static function getPost ($args)
    {
        echo 'executed.';
    }

}

test.php的

error_reporting(E_ALL);
ini_set('display_errors', true);


require_once('config.php');
require_once('classes/_Autoload_.php');


echo Api::actionCaller('forum')->getPost('test');

我覺得我需要更多有關類和對象作用域的內容... :)

只需為此切換“ getPost”方法聲明:

static function getPost($args){

私有方法意味着只有該類才能執行該方法。 靜態方法意味着可以在不實例化對象的情況下調用它,例如您嘗試使用雙冒號進行的操作。 class::method(args)

僅出於完整性考慮,公共職能是中間立場。 必須實例化一個對象以供您調用(通過$object->method(args) ),但是該對象可用於已導入該類的任何文件

編輯

附帶說明:我還想補充一點,要使方法用作靜態方法,仍需要“包含”該方法! 我為使用“進口”一詞表示歉意,最近我還在使用許多其他語言!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM