我试图将PHP文件的返回值赋值为变量的值,只有当该文件返回array value时。
假设我有一个具有以下内容的A.php文件:
文件:A.php
<?php
return [
'One' => 1,
'Two' => 2
];我想在文件B.php中赋值,只有当文件A.php返回的值为数组类型时,由文件A.php返回的值才会返回。
我所做的是:
文件:B.php
class B
{
public function __construct() {
$array = include 'path/to/B.php';
...
}
}这样,我在$array变量中有了A.php文件返回的值,但是,如果在A.php文件中,而不是返回一个数组,我会写:
文件:A.php
<?php
echo 'Hello World!';当将其包含到B.php文件中时,将对该文件的内容进行计算,并明显地生成一个包含以下内容的输出:
Hello World!我不想要的。
我的问题是,只有当由$array返回的值为B.php类型时,才能将文件A.php返回的值赋给文件A.php中的变量A.php。
我所看到的:
你能帮我解决我的问题吗?有什么优雅的方法吗?先谢谢你。
发布于 2020-12-15 20:24:35
您可以测试它的数组:
if(!is_array($array = include 'path/to/B.php')) {
$array = null; // or whatever
}但是要处理可能包含输出某些内容的文件的实例,只需缓冲输出并清除它:
ob_start();
if(!is_array($array = include 'path/to/B.php')) {
$array = null; // or whatever
}
ob_end_clean();如果找不到文件,include将返回false。如果找到并没有return某些内容,那么它将返回1。
不推荐,但我不知道你到底想做什么。您可以提取return和eval它:
//file A.php
$A = "return [
'One' => 1,
'Two' => 2
];";
//$A = file_get_contents('A.php');
preg_match('/return[^;]+;/', $A, $match);
if(isset($match[0])) {
$array = eval($match[0]);
}
print_r($array);https://stackoverflow.com/questions/65313058
复制相似问题