Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在类之外创建类方法_Php - Fatal编程技术网

Php 在类之外创建类方法

Php 在类之外创建类方法,php,Php,有没有办法从另一个类为一个类创建类方法 例如: class A { public function makeMethod() { $this->b = new B(); //create a method for class B such as a __call() method //to catch an error trying to access a non existant class B method

有没有办法从另一个类为一个类创建类方法

例如:

class A
{
    public function makeMethod()
    {
        $this->b = new B();
        //create a method for class B such as a __call() method
        //to catch an error trying to access a non existant class B method
        if (!method_exists($this->b, "__call")
            // create __call() method
    }
}

class B
{

}

看看这个例子:

class A
{
    public function makeMethod()
    {
        $this->b = new B();
        //create a method for class B such as a __call() method
        //to catch an error trying to access a non existant class B method

        $this->b->doit();
    }
}

class B
{

    public function __call($name,$args)
    {
        echo "function called: $name with arguments: $args";
    }

}

$a = new A();

$a->makeMethod();

?>
这将输出:

function called: doit with arguments: Array

因此,在某种程度上,我们调用了B类的非存在函数,我们仍然可以用它做一些事情。。。。e、 g.在
类B
中的
\u调用
方法中,您不能将执行指向某个回调函数(即使是
类A
)吗?为什么要“创造”它?(不要从开发者的角度思考,除非你必须…:-)

只是一个想法


从页面/模块执行处理中一瞥:


p.S.因为我自己已经创建了一个100%的PHP框架,也许我知道您可能需要什么…

看看这个示例:

class A
{
    public function makeMethod()
    {
        $this->b = new B();
        //create a method for class B such as a __call() method
        //to catch an error trying to access a non existant class B method

        $this->b->doit();
    }
}

class B
{

    public function __call($name,$args)
    {
        echo "function called: $name with arguments: $args";
    }

}

$a = new A();

$a->makeMethod();

?>
这将输出:

function called: doit with arguments: Array

因此,在某种程度上,我们调用了B类的非存在函数,我们仍然可以用它做一些事情。。。。e、 g.在
类B
中的
\u调用
方法中,您不能将执行指向某个回调函数(即使是
类A
)吗?为什么要“创造”它?(不要从开发者的角度思考,除非你必须…:-)

只是一个想法


从页面/模块执行处理中一瞥:


p.S.因为我自己已经创建了一个100%的PHP框架,也许我知道您可能需要什么…

您可以在超类中声明一个方法抽象。这意味着子类需要实现抽象方法,但不会提供实际的实现


如果您声明一个方法抽象,那么类也必须是抽象的

您可以在超类中声明方法抽象。这意味着子类需要实现抽象方法,但不会提供实际的实现


如果您声明一个方法抽象,那么类也必须是抽象的

我不完全确定您是否可以动态地为类创建方法。如果可以的话,我相信这将是非常糟糕的OOP实践

类本质上是对象的蓝图。我不明白为什么不能在类中编写方法

为了停止控制器上可能不存在的错误(即:edit/),我在自己的MVC框架中使用以下命令来检查类中是否存在方法:

$controller = new $class();

if( method_exists( $controller, $this->uri['method'] ) )
    $controller->{$this->uri['method']}( $this->uri['var'] );
else
    $controller->index();   

我不完全确定您是否可以动态地为类创建方法。如果可以的话,我相信这将是非常糟糕的OOP实践

类本质上是对象的蓝图。我不明白为什么不能在类中编写方法

为了停止控制器上可能不存在的错误(即:edit/),我在自己的MVC框架中使用以下命令来检查类中是否存在方法:

$controller = new $class();

if( method_exists( $controller, $this->uri['method'] ) )
    $controller->{$this->uri['method']}( $this->uri['var'] );
else
    $controller->index();   
试一试

试一试



如果您安装了扩展,那么这里就有一个功能。。。。但是这是很少安装的,不应该随意使用。

如果您安装了扩展,那么这里有一个功能。。。。但是这很少安装,不应该随意使用。

我能问一下为什么要为一个类创建方法吗?我正在创建自己的框架,并从另一个类中调用应用程序控制器。但是我想做一些类似于我的编辑的事情。如果你想重写基类的方法,你对OOP的概念有多熟悉?然后你想让你的用户
扩展你的默认类,而不是在事后向空的用户类添加方法。@Eli是的,那么?听起来你在要求标准的OOP继承。我能问一下你为什么要为一个类创建方法吗?我正在制作自己的框架,并从另一个类中调用应用程序控制器。但是我想做一些类似于我的编辑的事情。如果你想重写基类的方法,你对OOP的概念有多熟悉?然后你想让你的用户
扩展你的默认类,而不是在事后向空的用户类添加方法。@Eli是的,那么?听起来你在要求标准的OOP继承。我理解你提供的内容,但我想从系统控制器创建_call()方法,并将其注入应用程序控制器。“神奇地”如果我说自己创建uu call()方法,那么它将取消
如果方法u存在()
@Eli为什么不让那里的
\uu call
方法准备好处理任何调用?(我把框架中模块执行例程的一部分附加到我的主要答案上…)嘿,有1000000种方法可以做一些事情。对于加载模块=)@Eli,我的代码有点不同,显然。。。我不是说我的方法是最好的;至少,这是我在实现我的理想框架方面的想法。。。当然,您所指的模块,或者您可能已经实现的任何MVC模式,可能都是一个定义问题。。。还有味道。顺便说一句,祝项目顺利!(这绝对是一个非常有趣的旅程!;-)@Eli顺便说一句,我从第一次读到你的问题时就知道了:这些问题要么来自完全不懂自己的想法和解决方法的新手,要么来自那些真正复杂的人……:-)我理解您提供的内容,但我想从系统控制器创建_call()方法,并将其注入到应用程序控制器中。“神奇地”如果我说自己创建uu call()方法,那么它将取消
如果方法u存在()
@Eli为什么不让那里的
\uu call
方法准备好处理任何调用?(我把框架中模块执行例程的一部分附加到我的主要答案上…)嘿,有1000000种方法可以做一些事情。对于加载模块=)@Eli,我的代码有点不同,显然。。。我不是说我的方法是最好的;至少,这是我在实现我的理想框架方面的想法。。。属于