PHP - 在类中定义文件包含所有要使用的方法

时间:2014-09-23 14:34:07

标签: php class methods

是否有办法在类的开头包含一个文件供所有方法使用。以下示例是我想要实现的简化版本。目前,我必须在每个方法中包含该文件。

示例逻辑(不工作)

    class Myclass
    {
        protected require_once 'folerd1/folder2/pear/HTTP/Request2.php'; // this does not work

        public function aMethod()
        {
            $request = new HTTP_Request2('http://example1.com/', HTTP_Request2::METHOD_GET);
            try {
                $response = $request->send();
                if (200 == $response->getStatus()) {
                    echo $response->getBody();
                } else {
                    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                        $response->getReasonPhrase();
                }
            } catch (HTTP_Request2_Exception $e) {
                echo 'Error: ' . $e->getMessage();
            }
        }

        public function aMethod1()
        {
            $request = new HTTP_Request2('http://example2.com/', HTTP_Request2::METHOD_GET);
            try {
                $response = $request->send();
                if (200 == $response->getStatus()) {
                    echo $response->getBody();
                } else {
                    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                        $response->getReasonPhrase();
                }
            } catch (HTTP_Request2_Exception $e) {
                echo 'Error: ' . $e->getMessage();
            }
        }

        // more methods
    }

3 个答案:

答案 0 :(得分:0)

最好的方法是查看自动加载标准http://www.php-fig.org/psr/psr-0/

你试过这个吗?我不知道你的Request2.php文件内容是什么。所以我的代码只是一个PoC!

require 'folerd1/folder2/pear/HTTP/Request2.php'; 

class Myclass
{
    public function aMethod()
    {
        $request = new Request2('http://example1.com/', Request2::METHOD_GET);
        try {
            $response = $request->send();
            if (200 == $response->getStatus()) {
                echo $response->getBody();
            } else {
                echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                    $response->getReasonPhrase();
            }
        } catch (Request2_Exception $e) {
            echo 'Error: ' . $e->getMessage();
        }
    }

    public function aMethod1()
    {
        $request = new Request2('http://example2.com/', Request2::METHOD_GET);
        try {
            $response = $request->send();
            if (200 == $response->getStatus()) {
                echo $response->getBody();
            } else {
                echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                    $response->getReasonPhrase();
            }
        } catch (Request2_Exception $e) {
            echo 'Error: ' . $e->getMessage();
        }
    }
}

答案 1 :(得分:0)

2解决方案

1)require_once从课堂外取得

require_once 'folerd1/folder2/pear/HTTP/Request2.php';     
class Myclass
{

2)包含在构造

public function __construct() {
    require_once 'folerd1/folder2/pear/HTTP/Request2.php';
}

但它是更好的第一选择

答案 2 :(得分:0)

正如我注释掉的那样,只需要PHP类构造函数中的文件:

class Myclass{
    function Myclass(){
        require_once('folerd1/folder2/pear/HTTP/Request2.php');
    }

我没有检查过这个,但是你可能正在做的事情可能不仅包括所有课程,而且包括整个剧本。请检查一下是否有问题。如果没有,其他2个解决方案最终可能会这样做。

干杯