gpt4 book ai didi

php - 何时在 PHP 中使用 $this->property 而不是 $property

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:12 25 4
gpt4 key购买 nike

super 简单的问题。查看 2 个示例类方法。

在第一个中,我传入一个变量/属性调用 $params 然后我执行 $this->params

我的问题是,它真的需要吗,我通常这样做,但我注意到它可以在第二个示例中工作,只需调用 $params 而无需设置 $this 给它。

所以我的理论是这样的......如果你需要在那个类中的不同方法中访问该属性,你必须像 $this->params 一样设置它,你可以只使用 $params 如果您仅在它已经存在的相同方法中使用该属性。

有人可以阐明这一点并解释我的理论是否正确或者我是否偏离了方向我想知道这样做的原因所以我会知道什么时候做每种方法或做一个或另一个所有时间,谢谢你

class TestClass{

public function TestFunc($params){
$this->params = $params;

echo 'testing this something'. $this->params;
}
}

没有定义变量

class TestClass2{

public function TestFunc2($params){
echo 'testing this something'. $params;
}
}

最佳答案

使用 $this访问类变量时。

当访问实际上是函数参数的变量时,无需使用 $this关键字.. 实际上,要访问名为 $params 的函数参数,您不应该使用 $this 关键字...

在你的例子中:

class TestClass{

public function TestFunc($params){
$this->params = $params;

echo 'testing this something'. $this->params;
}
}

$params来自 TestFunc($params){是函数的参数/参数 TestFunc所以你不需要使用 $this .事实上,要访问参数的值,您不能使用 $this -- 现在当你使用 $this->params来自 $this->params = $params = $params; ,您实际上设置的值等于参数 $params 的值到名为 also 的新类级变量 $params (因为您没有在示例代码中的任何地方声明它)

[编辑] 基于评论:

看这个例子:

class TestClass{

public function TestFunc($params){
$this->params = $params;
# ^ you are setting a new class-level variable $params
# with the value passed to the function TestFunc
# also named $params

echo 'testing this something'. $this->params;
}

public function EchoParameterFromFunction_TestFunc() {
echo "\n\$this->params: " . $this->params . "\n";
# now you are echo-ing the class-level variable named $params
# from which its value was taken from the parameter passed
# to function TestFunc
}

}

$tc = new TestClass();
$tc->EchoParameterFromFunction_TestFunc(); # error: undefined property TestClass::$params
$tc->TestFunc('TestFuncParam');
$tc->EchoParameterFromFunction_TestFunc(); # should echo: $this->params: TestFuncParam

调用EchoParameterFromFunction_TestFunc时的错误无需先调用 TestFunc是未声明/设置名为 $params 的类级变量/属性的结果--你在里面设置这个 TestFunc ,这意味着它不会被设置,除非你调用 TestFunc .正确设置以便任何人都可以立即访问它是为了:

class TestClass{
# declare (and set if you like)
public /*or private or protected*/ $params; // = ''; or create a construct...

public function __construct(){
# set (and first declare if you like)
$this->params = 'default value';
}
...
...
...

[编辑:附加]

正如 @liquorvicar 提到的,我也完全同意你应该始终声明所有类级别的属性/变量,无论你是否会使用它们。作为一个例子,原因是您不想访问尚未设置的变量。请参阅上面的示例,该示例抛出错误 undefined property TestClass::$params ..

感谢@liquorvicar 提醒我..

关于php - 何时在 PHP 中使用 $this->property 而不是 $property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com