質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1824閲覧

PHPの初心者です。コンストラクタが上手く使えません。

asapan

総合スコア60

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/06/19 15:45

編集2018/06/19 15:46

PHP入門、コンストラクタの扱い方についてです。

php

1<?php 2class User{ //一文字目は大文字になる 3 //property 4 public $name; 5 6 //constructor 7 public function __constructor($name){ 8 $this->name = $name; //クラスの中のプロパティを指すときはthis-> 9 } 10 11 //method 12 public function sayHi(){ 13 echo "hi, i am $this->name!"; 14 } 15 16} 17 18 19$tom = new User("Tom"); 20 21echo $tom->name; //Tom 22$tom->sayHi(); //hi! i am Tom! 23 24?> 25

MAMPでローカルホストで実行したら
結果は Tomhi! i am Tom!となると思ったのですが

実際はhi, i am !としかでませんでした。
どうやら$nameはNULLとなっているようです。

ドットインストールのやり方に従っただけなのですが、なぜ表示されないのでしょうか?
PHPのバージョンが関係してたりしますか?
分かる方、ぜひとも宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asapan

2018/06/21 14:23

ご指摘ありがとうございます。以後気を付けます。
guest

回答2

0

ベストアンサー

php

1 public function sayHi(){ 2 echo "hi, i am {$this->name}!"; 3 }

流石にこんなところは見逃してましたわ。

php

1 // public function __constructor($name) 2 public function __construct($name) 3 { 4 $this->name = $name; //クラスの中のプロパティを指すときはthis-> 5 }

投稿2018/06/19 15:52

編集2018/06/19 16:26
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asapan

2018/06/19 15:57

よければ少し説明もお願いできませんか? PHP7では変数を出力するときに{}で囲む必要があるという事でしょうか?
退会済みユーザー

退会済みユーザー

2018/06/19 15:58

PHP7に限った話ではありません。
退会済みユーザー

退会済みユーザー

2018/06/19 16:01 編集

name! name と ! の間に半角スペースがあれば、出力はされます。スペースがないと、name! という変数がないためエラーになる。スペースを入れたくない場合、明示して{} でくくる
asapan

2018/06/19 16:17

そうなのですね... しかしご指摘の通り{}で囲っても表示されませんでした...。 スペースを空けても表示されません。何が考えられるでしょうか...?
退会済みユーザー

退会済みユーザー

2018/06/19 16:20

そうなると ini_set('display_errors', 1); error_reporting(E_ALL); をファイルの先頭に書いて、エラーを表示させて見ましょう。というか開発時にこれ書いてないことがそもそもアウトなので。
asapan

2018/06/19 16:27

ありがとうございます。 実行した結果、エラー出力はありませんでした。 定義はされているけれど、NULLのままでした。 試しに__constructorのなかでechoなどを書いてみましたが、表示されなかったので、 __constructorの処理が通っていない?可能性が考えられるのですが そういうことはあるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/19 16:28

回答編集してるので確認してください。
asapan

2018/06/19 16:30

非常に初歩的なミスで申し訳ありません。 本当にありがとうございました。
guest

0

このあたり見てみてください。

【PHP 文字列リテラルにおける変数展開ノ全テ - do_akiの徒然想記】
http://d.hatena.ne.jp/do_aki/20131218/1387335279

投稿2018/06/19 16:00

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asapan

2018/06/19 16:31

参考にさせていただきます、回答誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問