47509
```

    <?php
        $name = "Nobu Kim";
        $age = 42;
    
        $user1 = new User('Nobu', '42');
        echo $user1->username; //doesn't get printed
        echo $user1->age; //doesn't get printed
        //print_r($user1);
        //test->__destruct(); cannot call explicitly
        echo "wtf"; //gets printed
        echo $name; //gets printed
        //echo $user1;
    
        class User
        {
            public $username;
            public $age;
    
            function __construct($name, $age)
            {
                //Constructor statements here
                $username = $name;
                echo $username; //gets printed
                $age = $age;
                echo $age; //gets printed
            }
        }
    
    
            function __destruct()
            {
                //Destructor code here
            }
    
    
    
    ?>  
    
```

上記、何故コメントにて”Doesn't get printed"のライン、`echo $user1->username` & `echo
$user1->age;`はプリントされないのでしょうか。
CC BY-SA 4.0
2018-08-14T12:05:36.123
47508
2018-08-14T12:34:57.400
29239
question
php
php classのオブジェクトをInstantiateしてClass内Public VariableのEchoの仕方
**_上記、何故コメントにて”Doesn't get printed"のライン、echo $user1->username & echo
$user1->age;はプリントされないのでしょうか。_**

該当のプロパティの値がどちらも空(`null`)だからです。

PHPでは、コンストラクタやインスタンスメソッドのコンテキストでも、インスタンスのプロパティをアクセスするには`$this->`のようにオブジェクト演算子(`->`)を使うことが必須になっています。

```

        function __construct($name, $age)
        {
            //Constructor statements here
            $this->username = $name;
            echo $this->username;
            $this->age = $age;
            echo $this->age;
        }
    
```

あなたの元のコードでコンストラクタ内の2つの代入文、`$username =
$name`は、ローカル変数`$username`(PHPのローカル変数には宣言は要らない)に代入しているだけ(ローカル変数はプロパティの`$username`とは別物)、`$age
= $age`は引数として宣言された`$age`にそれ自身を代入しているだけになります。
CC BY-SA 4.0
2018-08-14T12:34:57.400
47509
2018-08-14T12:34:57.400
13972
47508
answer