将变量导入类中

时间:2013-01-05 23:37:57

标签: php class scope

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

示例:

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

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

3 个答案:

答案 0 :(得分:4)

您可以使用构造函数

将此参数提供给您的类
class foobar{    

    private $foo;

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

然后使用它。

或者PeeHaa的含义,您可以将方法更改为

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

并像这样称呼它

$foobar->example($foo);

答案 1 :(得分: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';

希望对你有所帮助。

答案 2 :(得分:-2)

是添加

class foobar{
    function example(){

        global $foo;

        echo "foo{$foo}";
    }
}

**把它放在另一个班级虽然更好,或者将它传递给你正在使用的方法也更好**