3

重複の可能性:
基本的な構文が解析されない場合の回避策

PHP でオブジェクト内の変数を使用する方法がわかりません。

たとえば、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 の 2 行目のように、同じオブジェクト内の別のオブジェクトに基づいて変数を設定するにはどうすればよいですか? :)

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 に答える