关于变量范围和函数(PHP)的奇怪行为

关于变量范围和函数(PHP)的奇怪行为,php,Php,在尝试在我的服务器上开发时,我注意到我正在开发的PHP脚本有一些奇怪的行为。似乎我无法访问在函数外部声明的变量 <?php $name = 'Jamie'; function sayMyName($name){ echo "My name is: " . $name; } sayMyName($name); ?> 我决定编写一个简单的test.php文件,以确保它不是由我的其他代码引起的,并作为一个健全的检查 <?php $name = 'Jamie'; functi

在尝试在我的服务器上开发时,我注意到我正在开发的PHP脚本有一些奇怪的行为。似乎我无法访问在函数外部声明的变量

<?php
$name = 'Jamie';
function sayMyName($name){
    echo "My name is: " . $name;
}
sayMyName($name);
?>
我决定编写一个简单的test.php文件,以确保它不是由我的其他代码引起的,并作为一个健全的检查

<?php
$name = 'Jamie';
function sayMyName(){
    echo "My name is: " . $name;
}
sayMyName();
?>

上面的代码输出:
我的名字是:
,我的IDE甚至警告我,
$name
未分配

我已经有一段时间没有使用PHP了,但我很确定这是有效的


这可能与PHP的设置有关吗?如果是的话,你知道是什么原因造成的吗我使用的是HostGator共享主机包,因此无法想象默认设置会太模糊。

您需要将变量设置为全局变量,以便函数可以访问它

<?php
$name = 'Jamie';
global $name;
function sayMyName(){
    echo "My name is: " . $name;
}
sayMyName();
?>

或者,您可以将变量传递给函数

<?php
$name = 'Jamie';
function sayMyName($name){
    echo "My name is: " . $name;
}
sayMyName($name);
?>

在课堂上

class sayMyName
{
public function setName($name) {
return "My name is: ".$name;
}
}
$myname=New sayMyName();
echo $myname->setName('Jamie');

在两种情况下都将其传递给函数
sayMyName($name)
。或者将变量作为参数传递。我建议使用第二个选项。看起来我最近玩JS和Python玩得太多了,因此,澄清一下,默认情况下PHP从未自动将同一文件中的变量包含到函数的作用域中?看来我最近太多地使用JS和Python了,因此澄清一下,默认情况下PHP从未自动将同一文件中的变量包含到函数的作用域中?这既正确又不正确。考虑到本页上的示例,这是正确的,但如果我们讨论的是类,则不正确。As类属性可由类方法(函数)使用
$this->propertyName