我对PHP中的变量声明有疑问,我知道这个问题可能有点愚蠢。我有以下代码
<?php
Class Test{
function __construct(){
$this->test = 'helloworkd';
}
function test(){
echo $this->test;
}
}
$test = new Test();
$test->test();
似乎我可以使用测试变量而不声明它。我的问题是为什么test()方法可以访问测试变量? 测试是全局变量吗?
感谢您的帮助!
答案 0 :(得分:0)
我的问题是为什么test()方法可以访问测试变量?
与其他语言不同,PHP允许您在不首先声明变量的情况下为变量赋值。口译员会为您初始化它们。这是不好的做法,因为它使代码更难以阅读和调试,并且如果您尝试读取从未声明的变量,它可能会导致错误:
<?php
$nonexistentArray['key'] = 7; //Bad practice, but PHP won't complain
$a = $fakeArray['key']; //Undefined variable error
即使在第二种情况下,PHP仍将继续执行脚本的其余部分,但它会抱怨。
测试是全局变量吗?
没有。它生活在当地范围内。
<?php
function myFunc(){
//$arr was never declared, but PHP won't complain
$arr['key'][]=7;
}
myFunc();
//Undefined var error. The $arr that was initialized in myFunc is not global
print_r($arr);
如果您尝试使用从未声明过的变量,那么好的IDE会抱怨。在你的情况下,当你在构造函数中时:
$this->test = 'helloworkd';
PHP将为您初始化此类属性。现在,您的其余代码可以使用它,包括test()
方法。如果它看起来像一个全局变量,它不是。这是一个阶级财产。如果您尝试从课程外部以test
方式访问它,则无法进行访问。您必须使用->
或$test->test
中的访问者操作符$this->test
。
答案 1 :(得分:0)
很多&#34;测试&#34;!你有asign test =&#34; helloworld&#34;在构造函数中,每个新的Test()都需要一个值。
$x = new Test();
$y = new Test();
echo $x->test(); //"helloworld"
echo $y->test(); //"helloworld"
答案 2 :(得分:0)
我会声明你的变量。这使代码对于您自己看到代码的任何其他代码更具可读性。
例如:
<?php
Class Test {
public $test;
function __construct($test){
$this->test = $test;
}
function test(){
echo $this->test;
}
所以现在我们有一个可以通过调用此类的实例访问的公共变量 $实例 - &GT;测试;
如果您不想这样,那么您可以将公共更改为私有或受保护 你可以在这里阅读:http://php.net/manual/en/language.variables.scope.php
无论您在创建此类的实例时作为参数传递的内容都将分配给$ test变量。
答案 3 :(得分:0)
我的问题是为什么test()方法可以访问测试变量?
它不能。它正在尝试访问常量test
,如果要访问类变量,请使用$this->test
。
例如:
<?php
echo foo;
将回显字符串“foo”并发出通知:使用未定义的常量foo - 假设'foo'在......
答案 4 :(得分:0)
<?php
class test{
public $test;
public function __construct(){
$this->test = 'helloworkd';
}
$newtest = new Test();
echo $newtest->test;
?>