3

可能重复:
未解析基本语法的解决方法

我不明白如何在 php.ini 中使用对象内部的变量。

例如在javascript中我会这样做,这会很好。

var foo = 10,
    bar = {option: foo+5}
;

console.log(bar.option);

在php中我做同样的事情但它失败了

$variable = 10;

class myObject {
    var $username = $variable + 5 ;
    var $zzz = $username + 5;

}

也可以$this在对象中使用还是仅在函数中使用?

最后,我将如何设置基于同一对象内另一个变量的变量,例如 myObject 的第二行?:)

4

4 回答 4

8

正确的方法是使用构造函数——在创建对象时运行的方法。

当您定义类属性时,您只能使用常量值(例如1,很好) 'xyz'array()而不是需要在运行时评估的表达式。

将变量传递给构造函数,不要使用全局变量。

class myObject {
    public $username;
    public $zzz;

    public function __construct($variable) {
        $this->username = $variable + 5 ;
        $this->zzz = $this->username + 5;
    }
}

$obj = new myObject(10);
echo $obj->username; //15

在 PHP 中,如果您不想编写 OOP 代码,则不需要使用类和对象。您可以简单地创建良好的旧功能。但是,如果您想使用它们,请尝试熟悉 OOP 概念。

于 2012-10-19T22:30:45.210 回答
4

具体来说,您询问了如何在 PHP 中使用全局变量。为此,您将在定义变量时使用 global 关键字:

$variable = 10;

class myObject {
    function foo () {
        global $variable;
        $username = $variable + 5 ;
        $zzz = $username + 5;
    }
}

但不要!这是个坏主意。这样做违反了对象封装的所有原则,并且每次运行代码时都会杀死一只小狗。好吧,也许小狗是安全的,但这仍然不是一个好主意。

相反,您应该通过构造函数或访问器方法将值传递给对象。见下文:

// The following code is guaranteed not to kill any puppies
class myObject {

    private $_variable;
    private $_userName;
    private $_zzz;

    public function __construct($value) {
        $this->_variable = $value;
        $this->_userName = $this->_variable + 5;
        $this->_zzz = $this->_userName + 5;
    }

}

$variable = 10;
$obj = new myObject($variable);
于 2012-10-19T22:47:22.410 回答
0

由于您可以在课堂外访问它的变量,我相信这就是您想要实现的目标

class myObject {
    public $username;
    public $zzz;
}

$variable = 10;
$obj = new myObject();
$obj->username = $variable + 5;
$obj->zzz = $obj->username + 5;

或者你可以有

class MyObject {
    private $username;
    private $zzz;

    public function increment($variable) {
        $this->username = $variable + 5;
        $this->zzz = $this->username + 5;
    }
}

$variable = 10;
$obj = new MyObject();
$obj->increment($variable); // First Call
$obj->increment(5); // Canbe called multiple times 
于 2012-10-19T22:31:09.633 回答
0

您可以在对象中拥有几种类型的变量,静态和非静态,但也可以是公共的、私有的受保护的。我不会详细介绍,但这里有一个例子:

class MyClass 
{
   public $test = 'non-static';
   public static $otherTest = 'static';
   private $privateTest = 'private';
   const CONSTANT_TEST = 'constant';

   public function someMethod() {
       echo $this->$test; // non-static
       echo self::$otherTest; // static
       echo static::$otherTest; // static
       echo $this->privateTest; // private
   }

   public static staticMethod() {
       echo $this->test; // error
       echo self::$otherTest; // static
       echo static::$otherTest; // static
   }
}

$obj = new MyClass;
echo $obj->test; // non-static
echo $obj::otherTest; // static
echo MyClass::otherTest; // static
echo $obj->privateTest; // error
echo $obj::CONSTANT_TEST; // constant
echo MyClass::CONSTANT_TEST; // constant
于 2012-10-19T22:31:13.150 回答