メンバ変数の参照について - PHPプロ!Q&A掲示板

2496

  • 0P

メンバ変数の参照について

質問日時 / 2010年2月3日 17:40 (最終編集:2月3日 17:42)    回答数 / 4件

Questioner:  tsd844u  このエントリーをはてなブックマークに追加 

キーワード / メンバ変数    参照   

お世話になります。
PHP初心者です。

メンバ変数の参照について教えて下さい。
今以下のようなclassを作成し、下記①と②で
printで値を表示しています。

①は表示されるのですが、②は空で表示されてしまい
値が取得できていません。

変数***に代入しbbbでglobal ***とすると②でも
表示できました。
同様のことをget、setを用意し行いたいのですが、
どこが間違っているのでしょうか?

オブジェクト言語の経験がつたない為、初歩的な
質問かと思いますが、ご指摘よろしくお願い致します。


//--- index.php ------------------------

$aaa = new aaa();
$aaa = setaaa("あああ")
print $aaa->getaaa();      -----①
$bbb = new bbb()
$bbb->exebbb()

//--- aaa.php --------------------------

class aaa{
var $aaa;

function aaa()
{
}

// 値を設定
function setaaa($aaa)
{
$this->aaa = $aaa;
}

// 値を取得
function getaaa()
{
return $this->aaa;
}
}

//--- bbb.php --------------------------
class bbb{
function bbb()
{
}

function exebbb()
{
$_aaa = new aaa();
print $aaa->getaaa();    ------②
}
}

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimixextbbの中でnewした$aaaは元の$aaaとは(変数の名前は
┃┗A01-1tsd844u返信ありがとうございます。 >extbbの中でnewした$
┗A02magicflute2>>CODE <?php // _ があるけど? $_aaa = new aaa(
 ┗A02-1tsd844u回答ありがとうございました。 PHP4で動いているも

回答一覧

並び替え:

A01 満足
answerershimix [2月3日 18:12] (最終編集:2月3日 18:20)

extbbの中でnewした$aaaは元の$aaaとは(変数の名前は同じでも)別のものです。

  1. $aaa = new aaa();
  2. $aaa->setaaa("あああ");
  3. $bbb = new bbb();
  4. $bbb->exebbb();
  5. print $aaa->getaaa();
として、class bbb内のextbbb()で
  1. function exebbb() {
  2.   $aaa = new aaa();
  3.   $aaa->setaaa("いいい");
  4.   print $aaa->getaaa();
  5. }
とすればわかると思います。両方の$aaaは違うもの指しています。これが同じものを指すようだとclass内での変数の命名が大変なことになってしまいます。


class云々以前にfunctionでも変数のスコープを意識しないとマズイと思いますけど・・。functionでも(global宣言を書かなければ)local変数です。

  http://www.php.net/manual/ja/language.variables.scope.php



(蛇足)
それにしても本当にこのソースで試されているんでしょうか?

  $aaa = setaaa("あああ")

とりあえず$aaa->setaaa("あああ");の意味だと捉えましたが(汗

この意見に回答する

ツリーへ TOPへ

A01-1
replyertsd844u [2月4日 11:42]

返信ありがとうございます。

>extbbの中でnewした$aaaは元の$aaaとは(変数の名前は同じでも)別のものです。

そうなのですね。変数名が同じであれば、次にnewするまでは、set値は保持されて
いるのかと思っていました。
異なるclass間で値を共有する場合は、global変数を使用するものなのでしょうか?


>class云々以前にfunctionでも変数のスコープを意識しないとマズイと思いますけど・・。functionでも(global宣言を書かなけれ>ば)local変数です。

了解です。参照渡しといったことが理解できてないです。
参考にさせていただきます。

>それにしても本当にこのソースで試されているんでしょうか?
実際の実行しているものとは異なります。
既存のソースがあり、やりたいことだけ書き換えたものでした。

お手数お掛けしました。

回答ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A02
answerermagicflute2 [2月3日 19:27] (最終編集:2月3日 19:52)

  1. <?php
  2. // _ があるけど?
  3. $_aaa = new aaa();

PHP4のクラスは何かと不自由。
PHP4は忘れて、PHP5で学んだ方がいいと思う。

  1. <?php
  2. /**
  3.  * Aaa Class for PHP5
  4.  *
  5.  */
  6. class Aaa
  7. {
  8.   private $_vars;
  9.   // コンストラクタ
  10.   public function __construct()
  11.   {}
  12.   // 値を設定
  13.   public function setValue($str)
  14.   {
  15.     $this->_vars = $str;
  16.   }
  17.   // 値を取得
  18.   public function getValue()
  19.   {
  20.     return $this->_vars;
  21.   }
  22. }
  23.  
  24. // Error、Warningが発生したら表示する
  25. error_reporting(E_ALL);
  26. ini_set("display_errors"1);
  27. // 
  28. $a = new Aaa;
  29. $_a->setValue('xxx')// Notice: Undefined variable: _a
  30. echo $a->getValue();

以下も参考に。
[コーディング規約]
http://www.phppro.jp/phpmanual/pear/standards.html
http://framework.zend.com/manual/ja/coding-standard.coding-style.html

この意見に回答する

ツリーへ TOPへ

A02-1
replyertsd844u [2月4日 11:45]

回答ありがとうございました。

PHP4で動いているものがありそれをいじくりながら勉強している
ところです。
PHP5になるといろいろ変わってくるんですね。

書き方についても一つ一つ調べながらといった状況です。
参考にさせていただきます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)