为什么通过函数包含的PHP会返回与主文件中的PHP不同的结果?

Sin*_*ard 0 php wordpress for-loop function php-include

我正在尝试在WordPress上运行一个返回用户信息的循环.当我有PHP代码在与查询相同的文件中回显结果时,它按预期工作.但是,如果我include用来访问其他地方的转换,即使所包含文件中的代码相同,它也不会返回任何信息.为什么会这样?

我的循环如下:

<?php

// The Query
$user_query = new WP_User_Query( array( 'include' => array( 1, 2, 3 ) ) );
// User Loop
if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {
?>

<?php transform('user_directory'); echo $user->display_name; ?>

<?php
    }
} else {
    echo 'No users found.';
}
?>
Run Code Online (Sandbox Code Playgroud)

Transform 是一个简单的函数,包括按名称的另一个页面:

function transform($transformation) {
    include 'transformations/'.$transformation.'.php';
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,echo命令有效,而包含的文件(via Transform)则不然.肯定会找到包含的文件,并且正在完美呈现其他html和PHP代码,它似乎无法找到任何内容$user.

包含的PHP文件中包含的代码是:

<?php echo $user->display_name; //Won't return this text
echo "It returns this text fine"; ?>
Run Code Online (Sandbox Code Playgroud)

我是否无法访问在一个页面上创建的数组,其中包含来自另一个页面的代码?

Mic*_*ral 5

问题是,你是从一个函数中包含它.PHP中的函数确实拥有自己的范围.包含的文件将继承函数的空范围.你可以传递$user给函数:

function transform($transformation, $user) {
    include 'transformations/'.$transformation.'.php';
}

...

<?php transform('user_directory', $user); echo $user->display_name; ?>
Run Code Online (Sandbox Code Playgroud)

这将设置$user变量,并使其可以通过包含的文件访问.

希望这可以帮助 :-)