「->」の意味がわかれば、PHP半分わかったも同じ。
公開日:
:
最終更新日:2013/01/08
PHPで実際開発して
バッチ系のプログラムの書き屋(VB)だった僕が、
どうしてもわからないこと。
感覚的に理解できないこと、それが
「->」の意味、だった。
以下、自分でまとめることによって復習&備忘録。
1.オブジェクト指向プログラミングを理解する。
データとそれを操作する手続きをオブジェクトと呼ばれるひとまとまりの単位として一体化し、
オブジェクトの組み合わせとしてプログラムを記述するプログラミング技法。
プログラムの部分的な再利用がしやすくなるなどのメリットがある。
代表的なオブジェクト指向言語としては、C言語にオブジェクト指向的な拡張を施したC++言語。
2.クラス(型、タイプ)とインスタンス(実体)を理解する
オブジェクト指向プログラミングで、クラスを基にした実際の値としてのデータのこと。
クラスと対比して用いられることが多く、クラスを「型」、インスタンスを「実体」として説明されることもある。
「オブジェクト」とほぼ同義語のように用いられることが多いが、
実際にメモリ上に配置されたデータの集合という意味合いが強く、データの実体をより具体的・直接的に捕らえた用語である。
例えば「名前、身長、体重」というクラスがあるとすれば、そのインスタンスは「田中、175、65」というように作られる。
一つのクラスから複数のインスタンスを作ることができ、それぞれのインスタンスは違った値を持ちうる。
プログラムの中で実際に扱われるのはクラスではなく、こうして作られたインスタンスの方である。
なお、ひな形となったクラスを表す際には「○○クラスに属するインスタンス」
「○○クラスのインスタンス」という表現が用いられる。
*英語表現「For instance」和訳:例えば
3.メンバ、メゾッド(クラス内の関数の事)、メンバ変数 &new
1)new:あるクラスのインスタンスを生成するには、new キーワードを使わなければならない。
2) -> は、インスタンス内のメンバ変数やメソッドへのアクセスを表す。
例1:
<?php //クラスを定義 class SomeClass{ var $sName = 'メンバ変数'; //クラス内の変数の事 //クラス内の関数の事をメソッドと言います。 function Message() { echo 'Hello World!<br/>'; } } //オブジェクト作成 $oObj = new SomeClass(); //オブジェクトのプロパティ呼び出し echo $oObj->sName."<br/>"; //オブジェクトのメソッド呼び出し $oObj->Message(); //オブジェクト型チェック echo '$oObjの型:'.gettype($oObj)."<br/>"; ?>
例2:
$xml = new SimpleXMLElements($fileContents);
$maxcustomer = count($xml->customer);
SimpleXMLのインスタンスは変数$xmlに格納して利用。
このオブジェクトは、$xml->customerとするとルート直下のcustomer要素がメンバーとしてアクセスできる
$xml->customer[$Loop]->name
root要素は常に1つ存在するので、事実上それを意識する必要は無いため、root直下の要素からアクセスを開始します。そして
その要素がさらに子要素(name要素やage要素)を持つ場合は「->」でつなげることでアクセス可能。
このxmlデータの場合、customer要素の数は任意ですので、count()で要素の数をカウントします。
このようにSimpleXMLオブジェクトは配列のようにアクセスできます。
*各要素へのアクセス
<root>
<customer> —$xml->customer[0]
<name type=”kanji”>山口</name> —$xml->customer[0]->name
<age>39</age>?????????????????????? —$xml->customer[0]->age
</customer>
—以下はPHPマニュアルのサイトをコピペ
http://php.net/manual/ja/simplexml.examples-basic.php
例 1. XML文字列を設定するインクルードファイル example.php
—
<?php $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> <movies> <movie> <title>PHP: Behind the Parser</title> <characters> <character> <name>Ms. Coder</name> <actor>Onlivia Actora</actor> </character> <character> <name>Mr. Coder</name> <actor>El ActÓr</actor> </character> </characters> <plot> So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary. </plot> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> </movies> XML; ?>
—
SimpleXMLの容易さが最も明確に現われるのは、 簡単なXMLドキュメントから文字列または数字を展開する時です。
例 2. <plot> を取得する
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); echo $xml->movie[0]->plot; // "So this language. It's like..." ?>
—
例 3. SimpleXMLでユニークでない要素にアクセスする
単一の親要素の子要素としてある要素のインスタンスが複数存在する時、 通常の反復処理を適用することができます。
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); /* 個々の <movie> ノードに対して、<plot> を分割して表示します */ foreach ($xml->movie as $movie) { echo $movie->plot, '<br />'; } ?>
—
例 4. 属性を使用する
ここまでは、要素の名前と値を読む方法のみを扱って来ました。 SimpleXMLは要素の属性にアクセスすることも可能です。 要素の属性にアクセスする方法は、配列
の要素に アクセスするのと全く同じです。
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); /* 最初の映画の <rating> ノードにアクセスします。 * また、その評価も出力します。*/ foreach ($xml->movie[0]->rating as $rating) { switch((string) $rating['type']) { // 要素のインデックスとして、属性を取得します case 'thumbs': echo $rating, ' thumbs up'; break; case 'stars': echo $rating, ' stars'; break; } } ?>
—
例 5. 要素および属性をテキストと比較する
要素または属性を文字列と比較する、もしくは、文字列を引数とする関数に 渡すには、(string) により文字列にキャストする 必要があります。さもないと、PHP
はこの要素をオブジェクトとして扱います。
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); if ((string) $xml->movie->title == 'PHP: Behind the Parser') { print 'My favorite movie.'; } htmlentities((string) $xml->movie->title); ?>
—
例 6. XPath の使用
SimpleXML は、XPath を標準でサポートしています。 <character> 要素を全て見つけるには、 以下のようにします。
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); foreach ($xml->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, '<br />'; } ?>
‘//’ はワイルドカードとして動作します。絶対パスを指定するには、 スラッシュを一つだけにします。
—
例 7. 値を設定する
SimpleXMLの中のデータは、定数とすることができません。 オブジェクトは、その全ての要素について変更が可能です。
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); $xml->movie[0]->characters->character[0]->name = 'Miss Coder'; echo $xml->asXML(); ?>
上のコードは、元のXMLドキュメントと全く同じXMLドキュメントを新規に 出力しますが、新しいXMLファイルでは、Ms. Coder が Miss Coder に変更されていると
ころが異なります。
—
例 8. 要素と属性を追加する
PHP 5.1.3 以降では、SimpleXML を使用して簡単に子要素および属性を追加することができます。
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); $character = $xml->movie[0]->characters->addChild('character'); $character->addChild('name', 'Mr. Parser'); $character->addChild('actor', 'John Doe'); $rating = $xml->movie[0]->addChild('rating', 'PG'); $rating->addAttribute('type', 'mpaa'); echo $xml->asXML(); ?>
上のコードは、元と同じオブジェクトを出力しますが、 そこに新しいキャラクターと評価が追加されています。
—
例 9. DOMとの相互運用性
PHPは、SimpleXML形式とDOM形式の間でXMLノードを変換する機構を有しています。 この例では、DOM要素をSimpleXMLに変換することができます。
<?php $dom = new domDocument; $dom->loadXML('<books><book><title>blah</title></book></books>'); if (!$dom) { echo 'Error while parsing the document'; exit; } $s = simplexml_import_dom($dom); echo $s->book[0]->title; ?>
関連記事
-
-
pearがインストールできない。
エラーの内容は以下の通りです。 C:\php5>go-pear.bat interna
-
-
WordPressプラグインエラー(cdnvote)
これは僕のメモです。 Wordpress4.2に、3.2以降更新されて
-
-
PHPをインストールする時、いつも忘れる事(short_open_tag)
一般的なマニュアルだと、以下の2箇所の修正で ApacheがPHPファイルを認識する。 1.h
-
-
MySQLのUNIQUEKEY制約を設定について
これは僕のメモです。 この質問を参考に。 http://q.hatena.ne.jp
-
-
複数の引数を渡す方法
これは僕のメモです。 <?PHP //引数,複数の引数を渡
-
-
データベースを配列に入れて、その中で範囲指定する
約600あるレコードのうち、 100から200の間のレコードだけ表示させる、 結構てこづりました
-
-
where 条件の中に、変数 を指定する
僕のメモです 1.like の場合(部分一致)
-
-
エラー:Warning: Invalid argument supplied for foreach() …
SQLを発行した後、配列に何も入っていない、と言われた事とほぼ同じ。 エラー:Warning:
-
-
xserverでmysqlへの接続(PHPのバージョンに注意)
これは僕のメモです。 Xserverを借りています。 PHPのバージョンにより、
- PREV
- 基本的に知らなかったこと
- NEXT
- PHP雑記