1

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

例子:

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

此代码产生一个通知:注意:未定义的变量: foo 有没有办法让它工作?还是有一些解决方法?

4

3 回答 3

4

您可以使用构造函数将此参数提供给您的类

class foobar{    

    private $foo;

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

然后使用它。

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

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

并这样称呼它

$foobar->example($foo);
于 2013-01-05T23:41:02.433 回答
0

使用构造来导入它或使用 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';

希望对您有所帮助。

于 2013-01-05T23:42:08.600 回答
-2

是的添加

class foobar{
    function example(){

        global $foo;

        echo "foo{$foo}";
    }
}

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

于 2013-01-05T23:40:05.827 回答