web-dev-qa-db-ja.com

PHPでクラスを初期化するとき、どのようにその関数で使用される変数をそのクラスに渡しますか?

だからここに契約があります。クラスを呼び出して値を渡し、すべてのさまざまな関数でそのクラス内で使用できるようにします。 ect。それをどうやってやるの?

ありがとう、サム

38
Sam152

クラスを呼び出して、そのクラス内で使用できるように値を渡したい

この概念は「コンストラクター」と呼ばれます。

他の回答が指摘しているように、 統一されたコンストラクタ構文__construct())PHP 5)を使用する必要があります。これは次のようになります。

class Foo {
    function __construct($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

// in code:

$foo = new Foo("some init value");

Notice-レガシーコードで実行される可能性のある、いわゆる古いスタイルのコンストラクターがあります。次のようになります。

class Foo {
    function Foo($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

この形式は、PHP 7の時点で公式に廃止されており、新しいコードには使用しないでください。

58
Tomalak

PHP(5以降)の新しいバージョンでは、関数__constuctは "new {Object}"を使用するたびに呼び出されるため、データをオブジェクトに渡したい場合は、関数を構築してから呼び出す

$obj = new Object($some, $parameters);

class Object {
    function __construct($one, $two) {}
}

__constructメソッドを支持して、名前付きコンストラクタはPHPから段階的に廃止されています。

34
davethegr8
class SomeClass
{
    public $someVar;
    public $otherVar;

    public function __construct()
    {
        $arguments = func_get_args();

        if(!empty($arguments))
            foreach($arguments[0] as $key => $property)
                if(property_exists($this, $key))
                    $this->{$key} = $property;
    }
}

$someClass = new SomeClass(array('someVar' => 'blah', 'otherVar' => 'blahblah'));
print $someClass->someVar;

これは、長期的にはメンテナンスが少ないことを意味します。

渡された変数の順序は重要ではなくなりました( 'null'のようなデフォルトの記述はもうありません:someClass(null、null、true、false))

新しい変数を追加する手間が減ります(コンストラクターで割り当てを記述する必要はありません)

クラスのインスタンス化を見ると、渡された変数が何に関連しているかがすぐにわかります。

Person(null, null, true, false) 

Person(array('isFat' => true, 'canRunFast' => false)) 
21
M.B

これが私のやり方です

class MyClass {

       public variable;  //just declaring my variables first (becomes 5)
       public variable2; //the constructor will assign values to these(becomes 6)

       function __construct($x, $y) {
            $this->variable  = $x;
            $this->variable2 = $y;
       }

       function add() {
            $sum = $this->variable + $this->variable2
            return $sum;
       }

} //end of MyClass class

インスタンスを作成し、関数addを呼び出します

$myob = new MyClass(5, 6); //pass value to the construct function
echo $myob->add();

11はページに書き込まれますが、あまり有用な例ではありません。呼び出したときに値を渡して追加したいのですが、これはポイントを示しています。

12
andrew

次のようにできます:

class SomeClass
{
   var $someVar;
   function SomeClass($yourValue)
   {
       $this->someVar = $yourValue;
   }

   function SomeFunction()
   {
       return 2 * $this->someVar;
   }
}

または、php5のコンストラクターにSomeClassの代わりに__constructを使用できます。

3
empi

ここでは誰もが明らかなことを見逃していると思います。はい、PHP4コンストラクタは非推奨ですが、次のように後方互換性を持つようにクラスを作成できます。

class myClass {

    var $myVar;

    function myClass { // PHP4 constructor, calls PHP5 constructor
        $this->__construct();
    }

    function __construct() { // PHP5 constructor
        doSomeStuff($myVar);
    }
}
0
Chris Cox