【问题标题】:Importing variables into a class将变量导入类
【发布时间】:2012-12-20 02:26:07
【问题描述】:

我想问一下,如果有办法在一个类中使用声明出来的变量。

例子:

$foo = 'bar';
class foobar{
    function example(){
        echo "foo{$foo}";
    }
}
$foobar = new foobar;
$foobar->example();

这段代码产生一个通知:Notice: Undefined variable: foo 有没有办法让它工作?或者有什么解决办法?

【问题讨论】:

标签: php class scope


【解决方案1】:

您可以使用构造函数将此参数传递给您的类

class foobar{    

    private $foo;

    public function __construct($name) {
        $this->foo = $name;
    }
}

然后使用它。

或者 PeeHaa 的意思,您可以将方法更改为

function example($param){
    echo "foo{$param}";
}

然后这样称呼它

$foobar->example($foo);

【讨论】:

  • 要么这个要么直接注入到需要它的方法中。
【解决方案2】:

使用构造来导入它或使用 global 关键字。你可以这样做:

$var = 'value';
class foobar {
    private $classVar;
    function __construct($param) {
        $this->classVar = $param;
    }
}

并像这样启动它:

$var = 'value';
$inst = new foobar($var);

或者您可以使用全局变量(在这种情况下我不建议这样做)并执行以下操作:

$var = 'value';
class foobar {
    global $var;
    function show() {
       echo $var;
    }
}

更新:要在另一个类中使用一个类,如果在整个实现过程中需要它的实例,则可以在构造函数中对其进行实例化,或者仅在需要时才对其进行实例化。

要在构造函数中创建对另一个类的引用,请执行以下操作:

class class1 {
    private $someVar;

    function __construct() {
        $this->someVar = 'success';
    }

    function doStuff() {
        return $this->someVar;
    }
}

class class2 {
    private $ref;
    private $val;
    function __construct() {
        $this->ref = new class1();
        $this->val = $this->ref->doStuff();
        // $this->val now holds the value 'success'
    }
}

$inst = new class2(); // upon calling this, the $val variable holds the value 'success'

或者您可以仅在需要时调用它,如下所示:

class class1 {
    private $someVar;

    function __construct() {
        $this->someVar = 'success';
    }

    function doStuff() {
        return $this->someVar;
    }
}

class class2 {
    private $ref;
    private $val;
    function __construct() {
        // do something
    }
    function assign() {
        $this->ref = new class1();
        $this->val = $this->ref->doStuff();
        // $this->val now holds the value 'success'
    }
}

$inst = new class2(); // the $val variable holds no value yet
$inst->assign(); // now $val holds 'success';

希望对你有所帮助。

【讨论】:

  • 我很想知道这个答案被否决以及出于什么原因。我给出了不止一种方法来完成任务,并演示了如何使用它,而不是只给出一半的代码。这个网站上的一些人让我感到困惑。
  • 非常感谢您的回答!我觉得它最完整:)
  • 感谢您的采纳!我不确定为什么这个网站上的人会无缘无故地投票给其他人,我只是想帮忙。如果您需要任何进一步的帮助,请告诉我,我很乐意为您提供帮助。
  • 我现在玩了一下这个新获得的知识,发现我什至可以通过这样的课程。所以我提出了: $this->foo_class->another_example() 它实际上正在工作。但是,在班级中使用不同班级的正确方法是什么?非常感谢:)
  • 你的做法是正确的。根据您的需要,您可以在构造函数中设置导入类的实例,也可以仅在需要时创建它。我将更新我的答案,向您展示如何做到这两点。附言如果您不介意,请对我的回答进行投票,如果它有帮助的话,我喜欢在这个网站上拥有良好的声誉。 :)
【解决方案3】:

是的添加

class foobar{
    function example(){

        global $foo;

        echo "foo{$foo}";
    }
}

** 将它放在另一个类中会更好,或者将其传递给您正在使用的方法也更好**

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 2021-12-22
  • 2015-10-19
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多