7

我正在学习 OOP,并且非常困惑彼此使用课程。

我总共有 3 节课

//CMS System class
class cont_output extends cont_stacks
{
    //all methods to render the output
}


//CMS System class
class process
{
    //all process with system and db
}


// My own class to extends the system like plugin
class template_functions
{
    //here I am using all template functions
    //where some of used db query
}

现在我想在两个系统类中使用我自己的类 template_functions。但是很迷茫怎么用。请帮助我理解这一点。

编辑:对不起,我忘了提到我自己的类在不同的 PHP 文件中。

4

2 回答 2

14

首先,请确保您include在使用它之前的类文件:

include_once 'path/to/tpl_functions.php';

这应该在您的 index.php 中或在使用tpl_function. 还要注意类的可能性autoloading

从 PHP5 开始,您必须能够自动加载类。这意味着您注册了一个钩子函数,每次尝试使用尚未包含代码文件的类时都会调用该函数。这样做你不需要include_once在每个类文件中都有语句。这里有一个例子:

index.php或任何应用程序入口点:

spl_autoload_register('autoloader');

function autoloader($classname) {
    include_once 'path/to/class.files/' . $classname . '.php';
}

从现在开始,您可以访问这些类,而不必再担心包含代码文件了。尝试一下:

$process = new process();

知道了这一点,您可以通过多种方式使用template_functions该类


只需使用它

如果您创建它的实例,则可以在代码的任何部分访问该类:

class process
{
    //all process with system and db

    public function doSomethging() {
        // create instance and use it
        $tplFunctions = new template_functions();
        $tplFunctions->doSomethingElse();
    }
}

实例成员:

以流程类为例。为了使process类中的 template_functions 可用,您创建一个实例成员并在需要它的地方初始化它,构造函数似乎是一个好地方:

//CMS System class
class process
{
    //all process with system and db

    // declare instance var
    protected tplFunctions;

    public function __construct() {
        $this->tplFunctions = new template_functions;
    }

    // use the member : 

    public function doSomething() {
        $this->tplFunctions->doSomething();
    }


    public function doSomethingElse() {
        $this->tplFunctions->doSomethingElse();
    }
}
于 2013-04-23T16:59:29.220 回答
0

您可以扩展template_functions类,然后您可以使用所有功能。

class cont_output extends cont_stacks //cont_stacks has to extend template_functions
{
    public function test() {
        $this->render();
    }
}


class process extends template_functions
{ 
    public function test() {
        $this->render();
    }
}


class template_functions
{
    public function render() {
        echo "Works!";
    }
}
于 2013-04-23T17:01:35.413 回答