continueとか文字列比較とか

前回まででHTMLScrapingのサンプルスクリプトHTMLToFeed.class.phpを使ってHTMLをRSSするコツはだいたい押さえた気がします。


出力されるRSSの内容で、不都合なものを修正する作業を引き続きします。

breakとかcontinueとか

categoryがnewsになるitemについては、他の方法でより詳細なRSSを取得できるので、処理対象から外す(出力しない)ことにします。
この場合、当該itemを処理する処理をスキップする必要があります。


breakだとループ自体を終了させてしまうので、continueなんですね、この場合。

breakは、現在実行中の for, foreach, while, do-while, switch 構造の実行を終了します。


PHP:break - Manual
 http://www.php.net/manual/ja/control-structures.break.php

continue は、ループ構造において現在の繰り返しループ の残りの処理をスキップし、条件式を評価した後に 次の繰り返しの最初から実行を続けるために使用されます、


PHP:continue - Manual
 http://jp.php.net/manual/ja/control-structures.continue.php


「continueでは、オプションの引数で 処理をスキップするループ構造のレベルの数を指定」できるというのがちょっと面白い。


文字列どうしの比較

continueを使って下記のように書いてみました。

<?php
// 以上略
            /* カテゴリ(li class)がnewsの時は処理対象から外します */
            $category = (string) $li['class'];
            if ($category === 'news') {
            continue;
            }
// 以下略
?>


文字列型どうしの比較の場合は、同じ型であるか否かを確認する===を使った方がいいみたい。
比較演算子の==は、型の確認をしませんが、===の方がパフォーマンスがいいというのは不思議な感じです。


型変換をしないため、といわれればなるほどと思いますけど。


▽比較演算子のパフォーマンス(PHPプロ!)
 http://www.phppro.jp/phptips/archives/vol48/2



しかし、こんな記事もありました。
今回は文字列どうしなので直接該当しませんが、文字列の比較の際には==厳禁ということですね。
strcmpを使えとありますが、面倒なのでそこは手抜きします……


▽[言語][プログラミング][PHP]素晴らしき自動的な世界〜或いは「型のない」世界〜
 (がるの健忘録)
 http://d.hatena.ne.jp/gallu/20061108/p1


PHP、文字列比較で「==」は禁止! - goungoun技術系雑記帳
 http://goungoun.dip.jp/app/fswiki/wiki.cgi/devnotebook?page=PHP%A1%A2%CA%B8%BB%FA%CE%F3%C8%E6%B3%D3%A4%C7%A1%D6%3D%3D%A1%D7%A4%CF%B6%D8%BB%DF%A1%AA


PHP:strcmp - Manual
 http://jp.php.net/manual/ja/function.strcmp.php