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

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

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

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

Q&A

解決済

1回答

1040閲覧

[PHP]クラス内でのスコープについて

imprezza

総合スコア61

PHP

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

0グッド

0クリップ

投稿2018/03/31 08:20

PHP学習に伴ってオブジェクト指向やクラス作成についても調べています

前提
調査/学習の過程のクラスでコンストラクタ、ゲッター、セッターを調べていました
例題コードを読み解こうとして以下のようなコードを見ていたんですが

PHP

1class Hoge { 2 private $name = ''; //name(1) 3 public function __construct($name) { //name(2) 4 $this->setName($name); //name(3) 5 } 6 public function setName($name) { //name(4) 7 //受け取り変数の検証 8 $this->name = $name;        //name(5)(6) 9 } 10 public function getName() { 11 return $this->name; //name(7) 12 } 13} 14

$name多すぎですorz

質問(1)
やっている事は
・コンストラクタでクラス外から引数$nameを受け取る
・セッターで引数$nameをプロパティ$nameにセットする
・ゲッターでプロパティ$nameを戻り値として渡す
と捉えて間違えていませんでしょうか

質問(2)
(上記質問が正しいと踏まえて)
コードに補足コメントとして番号を振りましたが、
・引数$Nameは(2)(3)(4)
・プロパティ$nameは(1)(5)(7)
・戻り値としての変数は宣言していない(プロパティをそのまま返している)
と解釈して間違えていませんでしょうか

質問(3)
(上記質問が正しいと踏まえて)

PHP

1class Hoge { 2 public $argname ; //宣言不要? 3 private $name = ''; //name(1) 4 public function __construct($argname) { //name(2) 5 $this->setName($argname); //name(3) 6 } 7 8 public function setName($argname) { //name(4) 9 //受取変数検証 10 $this->name = $argname; //name(5)(6) 11 } 12 13 public function getName() { 14 return $this->name; //name(7) 15 } 16} 17

と、意味毎に変数名を分けるのはPHPのコードを書く際のお行儀としておかしい所ありますか?

一つのスレにいくつも質問を書いてすみません
「書いて通ればそれが正義」で突っ走ると、後々矯正不能なゲテモノコード作成者になりそうで基礎段階での確認ばかりをしています

よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問(1)
やっている事は
・コンストラクタでクラス外から引数$nameを受け取る
・セッターで引数$nameをプロパティ$nameにセットする
・ゲッターでプロパティ$nameを戻り値として渡す
と捉えて間違えていませんでしょうか

正しいです。

質問(2)
(上記質問が正しいと踏まえて)
コードに補足コメントとして番号を振りましたが、
・引数$Nameは(2)(3)(4)
・プロパティ$nameは(1)(5)(7)
・戻り値としての変数は宣言していない(プロパティをそのまま返している)
と解釈して間違えていませんでしょうか

正しいです。

質問(3)
(上記質問が正しいと踏まえて)

class Hoge {
public $argname ; //宣言不要?
private $name = ''; //name(1)
public function __construct($argname) { //name(2)
$this->setName($argname); //name(3)
}

public function setName($argname) { //name(4) //受取変数検証 $this->name = $argname; //name(5)(6) } public function getName() { return $this->name; //name(7) }

}

と、意味毎に変数名を分けるのはPHPのコードを書く際のお行儀としておかしい所ありますか?

「意味毎に変数名を分ける」こと自体は特におかしなところはありませんが、
そもそも$this->name$name はそもそも別物なので、
敢えてさらに別名$argnameを付けることには悪影響の方が大きいのでは無いかなと感じました。

投稿2018/03/31 18:08

tanat

総合スコア18713

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

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

imprezza

2018/04/01 23:20

ご回答ありがとうございます 考え違いをしていないと判り一安心しています 今までの言語でやっていた癖で、同じメソッド内でスコープが違う事で別な$nameがあるってのに違和感ありまして… しかも引数の宣言無くて「おまえ何者?」となって混乱に拍車をかけていました PHPでは変数宣言は無くてもOKで、型も柔軟という特徴を理解していますが、ついつい「引数であること」「何の型変数なのか」を変数名に入れて長い変数にしてしまい長い変数名がゾロゾロ並ぶ不気味なコードを書いています 少しこの辺りは改めようかと思っています ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問