電子書籍の厳選無料作品が豊富!

プログラム初心者です

classを使うときに使うコンストラクタについて教えてください

なぜ自動で実行できるのか不思議です

質問1
このコンストラクタの使い道を教えてください。

質問2
PHPはC言語で作られているのですよね?コンストラクタを自動で実行しているC言語の処理はどうなっているのですか?


質問3
classと関数の違いがわかりません。ネットで調べると「classだと変数を保持できる」とでますが関数だと保持できないのでしょうか?


よろしくお願いします

A 回答 (2件)

クラス・オブジェクトの概念について先に学んでください。


http://www.shigeweb.jp/php/project_p/?page=class …


回答1

オブジェクトを作るときに「必ず」実行しなければいけない処理がある場合、それはコンストラクタに書いたり、コンストラクタから呼び出したりします。


回答2

「それはそういうもの」として深入りしない方がいいように思います。C言語レベルでの記述を知ろうとすることはいいと思いますが、それ以前に「なぜ自動で実行できるのか不思議です」という疑問の本質が分かりません。それを言い出すと「PHPの型の自動変換ってC言語レベルでどう書いてるの?」「json_decode関数で一発でデコードできるけどどうなってるの?」などの疑問も無限に沸いてくることでしょう。


回答3

関数でも変数を保持することは出来ます。

「静的変数」
http://www.php.net/manual/ja/language.variables. …

しかし、これで出来ることには限度があります。
複数の関数(メソッド)間で1つの変数を共有しつつ保持したい場合、それはオブジェクトにしか出来ません。

私は実装例として静的変数を http://qiita.com/mpyw/items/c39b9ee695a5c2e74627 で利用していますが、正直1つの関数にまとめるにはこれぐらいの処理が限界だと思います。もっと処理を増やせばかなり見にくくなり、クラス化することが不可欠になるでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
質問1と2は納得しました
質問3なのですがピンときません
>複数の関数(メソッド)間で1つの変数を共有しつつ保持
これがどうゆものかわかりません
10行くらいのコードで2つの違いを教えていただけると助かります
学習用の意味のないコードで結構です

関数でもグローバル変数を使えば同じことできるような気がして頭こんがらがっています

お礼日時:2013/10/08 12:17

短いコードしか書いていない場合は、グローバル変数のデメリットになかなか気づかないかもしれません。


大きな規模のアプリを作る場合はグローバル変数なんか使ってたら弊害がありすぎてコーディングに苦労すると思います。

例えば、(普通はオートロードに任せてこんなことしませんが)

require_once('A.php');
require_once('B.php');
require_once('C.php');

として呼んでいるとして、A,B,Cともそれぞれ中でグローバル変数をバリバリ使っているとします。

「あれ・・・B.phpの中で$idって変数使ってたけどこれってA.phpの中にもあったっけ・・・影響ないのかな・・・」

とか思ったりしませんか?このように変数名が競合したりする問題を引き起こすのがグローバル変数です。PHP5.3から利用可能な「名前空間」を使えばこの問題は解消することが出来ますが、名前空間に甘んじてグローバル変数を多用するならば本末転倒です。
    • good
    • 0
この回答へのお礼

理解できました
ありがとうございました

お礼日時:2013/10/08 20:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!