如何使外部方法在另一个类中可用?

时间:2019-07-12 13:01:50

标签: php oop

我是OOP的新手,但是我很快就到达了。

我有一个带有用于连接api的单一方法的类。我还有另一个类,其中包含使用此api的各种端点和查询的各种方法。

我希望只能调用一次第一个类,并在变量类中使用该类中的方法,而不是一遍又一遍地调用每个方法中的类。

例如:

目前我正在这样做。

class classname
{
    public function name1
    {
        # some code
        $request = new someClassName();
        $var = $request->functionName();
    }

    public function name2
    {
        # some code

        $request = new someClassName();
        $var = $request->functionName();
    }
}

我想实现以下目标:

class classname
{
    public $request = new someClassName();

    public function name1
    {
        # some code
        $var = $request->functionName();
    }

    public function name2
    {
        # some code
        $var = $request->functionName();
    }
}

3 个答案:

答案 0 :(得分:3)

使用$this并创建一个构造函数。

web

答案 1 :(得分:2)

更进一步,您可以将依赖项someClassName注入您的类中,然后通过公共方法公开它。另外,请将财产设为私有,这样就无法从外部访问它。

为清楚起见,我将someClassName重命名为Request,并将classname重命名为Handler

class Handler
{
    private $_request = null;

    public function __construct(Request $request)
    {
        $this->_request = $request;
    }

    public fuction handle()
    {
        return $this->_request->process();
    }
}

// Inject the dependency into the class from the outside. 
$handler = new Handler(new Request());

// Call the public method on the class to perform actions. 
echo $handler->handle();

答案 2 :(得分:0)

您可以实现的另一种选择:

如果您的 someClassName 仅具有一种连接到api的方法,这意味着您对该类没有其他依赖项(注入等),则可以将该方法声明为static然后调用在您的类名中。

class someClassName
{

    public static function functionName()
    {
        # some code

    }
}

class classname
{

    public function name1
    {
        # some code
        $var = someClassName::functionName();
    }

    public function name2
    {
        # some code
        $var = someClassName::functionName();
    }
}

或者您也可以在下面的例子中写一个特质:

trait sometraitName
    {
        protected   function functionName()
        {
            # some code
        }
    }

class classname
{
    use sometraitName;

    public function name1
    {
        # some code
        $var = $this->functionName();
    }

    public function name2
    {
        # some code
        $var = $this->functionName();
    }
}