Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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_Function_Modularity - Fatal编程技术网

PHP-调用两个相同的函数?可能的

PHP-调用两个相同的函数?可能的,php,function,modularity,Php,Function,Modularity,是否可以在两个文件中定义相同的函数,包括它们,然后一次性调用这两个函数,例如 ==File1.php== function my_function() { echo "File 1!"; } ==File2.php== function my_function() { echo "File 2!"; } ==File3.php== include('File1.php'); include('File2.php'); my_function(); - 这将产生: File 1! File

是否可以在两个文件中定义相同的函数,包括它们,然后一次性调用这两个函数,例如

==File1.php==

function my_function() {
echo "File 1!";
}
==File2.php==

function my_function() {
echo "File 2!";
}
==File3.php==

include('File1.php');
include('File2.php');
my_function();
- 这将产生:

File 1!
File 2!
这是不可能的吗?我该如何解决这个问题

谢谢,
托马斯·爱德华兹不会的。您将得到一个无法重新声明函数错误。您必须改用类的方法,它们可以有相同的名称。

不会。您将得到一个无法重新声明函数错误。您必须改用类的方法,它们可以有相同的名称。

不,这是不可能的。您将得到一个错误,因为您调用了同一个函数两次。

不,这是不可能的。您将收到一个错误,因为您调用了相同的函数两次。

这将不起作用,因为两个方法具有相同的签名。换句话说,PHP不知道首先调用哪个方法,因此会产生错误

但是,您可以创建一些具有相同名称的方法的对象,将它们存储在列表中,然后循环遍历它们

以下是未经测试的,但原则是存在的

// Abstract class acts as a common interface to allow using the same method name
abstract class MyAbstract {  
    abstract function my_function();
}  

class FirstClass {
    function my_function() {
        echo "Class 1!";
    }
}

class SecondClass {
    function my_function() {
        echo "Class 2!";
    }
}

$objectArray[] = new FirstClass();
$objectArray[] = new SecondClass();

foreach($objectArray as $object){
    $object->my_function();
}

这将不起作用,因为两个方法具有相同的签名。换句话说,PHP不知道首先调用哪个方法,因此会产生错误

但是,您可以创建一些具有相同名称的方法的对象,将它们存储在列表中,然后循环遍历它们

以下是未经测试的,但原则是存在的

// Abstract class acts as a common interface to allow using the same method name
abstract class MyAbstract {  
    abstract function my_function();
}  

class FirstClass {
    function my_function() {
        echo "Class 1!";
    }
}

class SecondClass {
    function my_function() {
        echo "Class 2!";
    }
}

$objectArray[] = new FirstClass();
$objectArray[] = new SecondClass();

foreach($objectArray as $object){
    $object->my_function();
}

您不能重新定义全局函数(,但这是糟糕的巫术),因此您可以选择使用类驱动的解决方案,或者使用匿名函数驱动的解决方案,如下所示

您可以编写一个函数,将所有包含的函数组装到一个调用队列中(这只是运行队列的另一个匿名函数):

并按所述从每个文件返回匿名函数,而不是重新定义全局函数:

file1.php

return function() {
    echo 'Hello';
};
return function() {
    echo 'World';
};
file2.php

return function() {
    echo 'Hello';
};
return function() {
    echo 'World';
};
然后,您可以:

// both
$function = queueFunctions([
    include('file1.php'), 
    include('file2.php'),
]);

$function(); // HelloWorld

// one of them    
$function = queueFunctions([
    include('file2.php'),
]);

$function(); // World

// repeated calls
$function = queueFunctions([
    include('file2.php'),
    include('file1.php'),
    include('file2.php'),
]);

$function(); // WorldHelloWorld

您不能重新定义全局函数(,但这是糟糕的巫术),因此您可以选择使用类驱动的解决方案,或者使用匿名函数驱动的解决方案,如下所示

您可以编写一个函数,将所有包含的函数组装到一个调用队列中(这只是运行队列的另一个匿名函数):

并按所述从每个文件返回匿名函数,而不是重新定义全局函数:

file1.php

return function() {
    echo 'Hello';
};
return function() {
    echo 'World';
};
file2.php

return function() {
    echo 'Hello';
};
return function() {
    echo 'World';
};
然后,您可以:

// both
$function = queueFunctions([
    include('file1.php'), 
    include('file2.php'),
]);

$function(); // HelloWorld

// one of them    
$function = queueFunctions([
    include('file2.php'),
]);

$function(); // World

// repeated calls
$function = queueFunctions([
    include('file2.php'),
    include('file1.php'),
    include('file2.php'),
]);

$function(); // WorldHelloWorld

你想完成什么?给我们一些背景可以让我们给出最合适的解决方案:)不,这是不可能的,我甚至不确定它会有什么用处。你想实现什么?给我们一些上下文可以让我们给出最合适的解决方案:)不,这是不可能的,我甚至不知道它会有什么用处。谢谢您的编辑@deceze;)感谢您的编辑@deceze;)