<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ピクスログ &#187; php</title>
	<atom:link href="http://picslog.picsmate.net/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://picslog.picsmate.net</link>
	<description>みずがめのラクガキはじめました。（あと、写真とか日記とか）</description>
	<lastBuildDate>Thu, 15 Apr 2010 08:30:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHPクラスの継承でオーバーライドしてしまった値を取得！</title>
		<link>http://picslog.picsmate.net/2009/01/05/657/</link>
		<comments>http://picslog.picsmate.net/2009/01/05/657/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 12:24:04 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[WEB開発]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/?p=657</guid>
		<description><![CDATA[
あけましておめでとうございます(＞_＜)
なんだかんだで、ずるずると公開から２回目の新年を迎えてしまいました！
結構な勢いで更新さぼっちゃいましたが、今年もよろしくお願いいたします！！！
と、本題。
少し前にPHPプロ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picslog.picsmate.net/wp/wp-content/uploads/2009/01/2009-1-5_php_class_cast.jpg" alt="ソース-オブジェクトをキャスト" rel="lightbox[2009-1-5]" title="ソース-オブジェクトをキャスト"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2009/01/2009-1-5_php_class_cast.thumbnail.jpg" alt="ソース-オブジェクトをキャスト" width="240" height="112" class="attachment wp-att-658 " /></a><br />
あけましておめでとうございます(＞_＜)<br />
なんだかんだで、ずるずると公開から２回目の新年を迎えてしまいました！</p>
<p>結構な勢いで更新さぼっちゃいましたが、今年もよろしくお願いいたします！！！</p>
<p>と、本題。</p>
<p>少し前にPHPプロの質問で、「<a href="http://www.phppro.jp/qa/1722" rel="external">親クラスのメソッドをクラス外から呼びたい</a>」って質問があがっていました。</p>
<p>オブジェクトを配列へキャストするとこうなるんだぁ・・・（￣□￣；）<br />
オーバーライドで上書きしちゃってても、プライベート変数だっても関係ないじゃん・・・っていう話。</p>
<p>質問が解決されてから日が経っちゃってるけど、完全に忘れる前にメモ。</p>
<p>というわけで、自分の中では驚愕の事実だった手法は以下から。<br />
<span id="more-657"></span></p>
<p class="sub">紹介されていたコード</p>
<p>どうやら<a href="http://www.phpunit.de/" rel="external">PHPUnit</a>内の処理を参考にされた模様。</p>
<blockquote cite="http://www.phppro.jp/qa/1722#6994">
<pre><code class="color">&lt;?php 

/**
 * privateな属性の値を参照する。
 * 参考: PHPUnit_Framework_Assert::getObjectAttribute($object, $attributeName)
 */
function get_private_value($obj,$attributeName,$class=false) {
  if( $class===false) {
    $class = get_class($obj);
  }
  $objArray = (array) $obj;
  $privateName = sprintf(" %s %s",$class,$attributeName);
  if( array_key_exists($privateName,$objArray) ) {
    return $objArray[$privateName];
  }
  return null; 

}
  $test=new testClass3(); 

  $ret = get_private_value($test,'a','testClass3');
  var_dump($ret);
  $ret = get_private_value($test,'a','testClass');
  var_dump($ret); 

?&gt;
</code></pre>
</blockquote>
<p>まぁ、これだけだと途中の処理が省略されて、何をやってるのか分からないから、簡単にまとめます。</p>
<p class="sub">まとめ</p>
<p>まずプライベート変数を持った親クラスを作り、オーバーライドさせるために同じ名前のプライベート変数を持たせた子クラスで継承させる。</p>
<pre><code class="color">&lt;?php
//親クラス
class ParentClass {
  private $value = 'ParentClass Value!';
}
//子クラス
class ChildClass extends ParentClass {
  private $value = 'ChildClass Value!';
}
?&gt;
</code></pre>
<p>余計なことは省いて変数を上書きするだけ。</p>
<p>で、オブジェクトを作ってから<strong>配列にキャスト</strong>！(゜∀゜)</p>
<pre><code class="color">&lt;?php
$object = new ChildClass();
var_dump((array)$object);
?&gt;
</code></pre>
<p>ドキドキの結果は・・・。</p>
<pre><code class="color">array(2) {
  ["ChildClass�value"]=>
  string(17) "ChildClass Value!"
  ["ParentClass�value"]=>
  string(18) "ParentClass Value!"
}
</code></pre>
<p>うわーーーー∩(≧∇≦)∩<br />
なにか気持ち悪いものが見えてるけど、各プライベート変数が存在する配列になってるっぽい！</p>
<p>それから元記事で紹介されている</p>
<pre><code class="color">sprintf(" %s %s",$class,$attributeName);</code></pre>
<p>を参考に、質問者の方が回答されている実用的（？）な方法で記述すると。</p>
<pre><code class="color">&lt;?php
$object = new ChildClass();
$arrayObject = (array)$object;

echo "ParentClass Value : ",
  $arrayObject[" ParentClass value"],
  "nChildClass Value : ",
  $arrayObject[" ChildClass value"];
?&gt;</code></pre>
<p>ワクワクの結果は・・・。</p>
<pre><code class="color">ParentClass Value : ParentClass Value!
ChildClass Value : ChildClass Value!
</code></pre>
<p>うはぁ(＞▽＜)／<br />
取り出せたよ！！！</p>
<p>PHPすげぇ(＞_＜);;;<br />
全く使い所がわかんねぇ！！！</p>
<p>すごいんだけど、こういう力技が必要になった時点で設計ミスってる気が・・・。</p>
<p>質問内容もスゴイけど、解決できちゃうところがスゲェ！<br />
・・・そうかぁ、オブジェクトは配列にキャストかぁ(´･ω･`)</p>
<p>PHP4あたりでは<a href="http://www.php.net/manual/ja/function.get-object-vars.php" rel="external">get_object_vars</a>なんかを使って、メンバー変数を確認したりはしたけど、プライベートとか抜き出せないし、まぁメンバー変数を上書きしちゃったら１つの変数だしで、ちょっとどうしようもなかったんだけど。</p>
<p>まだまだPHPには未知の領域が存在しそうです(゜∀゜)</p>
<p>追記（2008-1-5 21：34：12）：<br />
<a href="http://d.hatena.ne.jp/shimooka/searchdiary?word=%2a%5bPHP%5d" rel="external">オブジェクトをarrayにキャストする &#8211; Do You PHP はてな</a><br />
うはぁ、わりと有名なのかな(＞_＜)<br />
いろいろスゲェ。</p>
<p>関連記事：<br />
<a href="http://picslog.picsmate.net/2008/12/28/652/">JavascriptでindexOfとmatchの速度がちょっと気になった</a><br />
<a href="http://picslog.picsmate.net/2008/12/20/645/">[MDIEスクリプト] select2zip.jsを更新</a></p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2009/01/05/657/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>xamppのインストール手順まとめ</title>
		<link>http://picslog.picsmate.net/2008/11/27/500/</link>
		<comments>http://picslog.picsmate.net/2008/11/27/500/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 19:18:09 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[WEB開発]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ソフト]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[メモ]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[インストール]]></category>
		<category><![CDATA[環境変数]]></category>
		<category><![CDATA[設定]]></category>
		<category><![CDATA[開発環境]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[xampp]]></category>
		<category><![CDATA[文字コード]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/?p=500</guid>
		<description><![CDATA[
OSの再インストールに伴い、開発環境も再構築中。
まずは「xampp」と「Aptana Studio」をインストール。
いろいろ入れ直すのが面倒なので、いろいろ詰め込まれた「Pleiades All in One パッ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_1.jpg" rel="lightbox[pics-1227725241]" title="xampp-コントロールパネル"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_1.thumbnail.jpg" alt="xampp-コントロールパネル" width="240" height="193" class="attachment wp-att-488 " /></a><br />
<a href="http://picslog.picsmate.net/2008/11/26/480/">OSの再インストール</a>に伴い、開発環境も再構築中。</p>
<p>まずは「xampp」と「Aptana Studio」をインストール。</p>
<p>いろいろ入れ直すのが面倒なので、いろいろ詰め込まれた「<a href="http://mergedoc.sourceforge.jp/" rel="external">Pleiades All in One パッケージ</a>」のEclipseでも入れちゃおうかとも思ったりもしたけど。</p>
<p>とりあえず「xampp」セットアップから、PHP、Mysqlの設定手順についてまとめ。<br />
<span id="more-500"></span></p>
<p class="sub">xamppをインストール</p>
<ol>
<li>今回は「<a href="http://www.apachefriends.org/jp/xampp-windows.html" rel="external">apache friends</a>」からxamppのインストーラー版をダウンロード。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_2.jpg" rel="lightbox[pics500]" title="xampp-ダウンロード"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_2.thumbnail.jpg" alt="xampp-ダウンロード" width="240" height="162" class="attachment wp-att-489 " /></a><br />
  別にzip版でも、そんなに作業内容は変わんないので、好みで( ・ω・)</li>
<li>表示に従って、さくさくインストール。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_3.jpg" rel="lightbox[pics500]" title="xampp-インストール"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_3.thumbnail.jpg" alt="xampp-インストール" width="240" height="149" class="attachment wp-att-490 " /></a></p>
<p>  インストール後に起動確認。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_1.jpg" rel="lightbox[pics-1227725241]" title="xampp-コントロールパネル"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_1.thumbnail.jpg" alt="xampp-コントロールパネル" width="240" height="193" class="attachment wp-att-488 " /></a></li>
<li>今回は業務専用のパソコンでないので、パソコン起動毎にApacheとMysqlを立ち上げる必要はないから、スタートアップを手動に変える。
<p>  コントロールパネル &gt; 管理ツールから、サービスを起動してApacheとMysqlの「スタートアップの種類」を「手動」に変更。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_4.jpg" rel="lightbox[pics500]" title="Apache-スタートアップを手動"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_4.thumbnail.jpg" alt="Apache-スタートアップを手動" width="240" height="219" class="attachment wp-att-491 " /></a></li>
</ol>
<p class="sub">Apacheの設定</p>
<p>「httpd.conf」を書き換えるんだけど、ある程度ファイルを分けてたほうが設定を間違った場合に修正しやすいので、「<a href="http://httpd.apache.org/docs/2.2/ja/mod/core.html#include" rel="external">Include</a>」を使って、自分設定を分けておく方が便利(*°∀°)=3</p>
<ol>
<li>xamppのインストールディレクトリ &gt; apache &gt; confディレクトリに移動。</li>
<li>「httpd.conf」をテキストエディタで開く。<br />
  ついでに「httpd.conf」を別名でバックアップとかしてた方がいいかも(≧∇≦)/</li>
<li>「httpd.conf」の最終行に移動して、
<pre><code class="color">#自分設定 (2008-11-26更新)
Include "C:\自分のconfを置くディレクトリ\*.conf"</code></pre>
<p>  みたいに記述しておき保存。</p>
<p>  あとは自分設定の保存予定地に、ファイル名.confの要領で好きなだけ設定を追加する。</p>
<p>  Apacheが動かなくなった時は、拡張子をtxtなんかにでも書き換えれば、どれが不具合起してるのか見つけやすくていいよ(゜∀゜)</li>
<li>最後にApacheサービスを再起動して、ブラウザで「http://locslhost/」を叩いて、お約束の確認。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_5.jpg" rel="lightbox[pics500]" title="xampp-スタートページ"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_5.thumbnail.jpg" alt="xampp-スタートページ" width="240" height="110" class="attachment wp-att-492 " /></a></li>
</ol>
<p class="sub">PHPとMysqlのパスを通す</p>
<p>コマンドラインからサクッと実行できるように、PHPとMysqlのパスを通しておきます（・∀・）</p>
<p>Mysqlはサービスを起動しないと実行できないけど、PHPはパスさえ通しておけば実行できるので簡単便利。<br />
（php.iniのパスを渡してやらないと設定が違ってたりするけどね）</p>
<ol>
<li>コントロールパネル &gt; システム &gt; 詳細設定から、環境変数をクリック。</li>
<li>システム環境変数の新規ボタンをクリックし、とりあえずxamppのパスを変数登録してあげる。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_6.jpg" rel="lightbox[pics500]" title="xampp-パスを環境変数に登録"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_6.thumbnail.jpg" alt="xampp-パスを環境変数に登録" width="240" height="82" class="attachment wp-att-493 " /></a><br />
  ※画像はCドライブ直下にxamppをインストールした場合。</p>
<p>  必須じゃないけど、パスを通した時に少しでも見通しを良くするための俺仕様(^_^;)</li>
<li>システム変数の「Path」をダブルクリックしてパスを通す。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_7.jpg" rel="lightbox[pics500]" title="php、mysqlのパスを通す"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_xampp_7.thumbnail.jpg" alt="php、mysqlのパスを通す" width="240" height="200" class="attachment wp-att-494 " /></a></p>
<p>  今回はxamppのパスを登録しているので、Path変数の最後に</p>
<pre><code class="color">;%XAMPP%\php;%XAMPP%\mysql\bin</code></pre>
<p>  を追加。</p>
<p>  ちょっと読みやすくなった！・・・よね？(＞_＜)</li>
<li>変数が通ったか確認するのに、コマンドラインからPHPを実行。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_php_1.jpg" rel="lightbox[pics500]" title="PHP-コマンドプロンプトで確認"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_php_1.thumbnail.jpg" alt="PHP-コマンドプロンプトで確認" width="240" height="175" class="attachment wp-att-495 " /></a><br />
  問題なし！(*°∀°)=3</p>
<p>  コピペ用にコードも載せておきます。</p>
<pre><code class="color">php -r "echo phpversion();";</code></pre>
</li>
</ol>
<p class="sub">PHPの設定</p>
<p>これは好きにすればいいんだけど、とりあえずxamppバンドルのphp.iniは「magic_quotes_gpc」がOnになってるので、とりあえずこれだけ修正。</p>
<ol>
<li>xamppのインストールディレクトリ &gt; apache &gt; binディレクトリに移動。<br />
  ※xamppの場合、phpディレクトリのphp.iniはダミーなので注意！(＞_＜)</li>
<li>「php.ini」をテキストエディタで開く。<br />
  Apache設定同様に別名でバックアップとかしてた方がいいかもね！</li>
<li>テキストファイルから「magic_quotes_gpc」を検索。</li>
<li>「On」から「Off」に書き換える。</li>
</ol>
<p class="sub">Mysqlの設定</p>
<p>基本UTF-8で使ってるので、とりあえず文字コードをUTF-8に統一。</p>
<ol>
<li>xamppのインストールディレクトリ &gt; mysql &gt; binディレクトリに移動</li>
<li>「my」と見えている短縮ダイヤルファイルヽ（´ー｀）┌<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_1.jpg" rel="lightbox[pics500]" title="mysql-設定ファイル"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_1.thumbnail.jpg" alt="mysql-設定ファイル" width="240" height="133" class="attachment wp-att-496 " /></a><br />
  これがMysqlの設定ファイルなので、テキストエディタで開く。<br />
  必要ならバックアップ（・∀・）</p>
<p>  windowsでは「cnf」拡張子が短縮ダイヤルファイルとして設定されてるんだね( ・ω・)</li>
<li>[mysqld]項目の直後に以下の記述を追加。
<pre><code class="color">default-character-set = utf8
skip-character-set-client-handshake </code></pre>
</li>
<li>mysqlを起動し確認。<br />
  だけど、このまま書くと読みにくいので、いったん切り上げます(゜∀゜)</li>
</ol>
<p class="sub">Mysqlの文字コードを確認</p>
<ol>
<li>xamppコントロールパネルなどから、Mysqlサービスを起動。</li>
<li>コマンドプロンプトでMysqlに接続するのに、以下コード実行。
<pre><code class="color">mysql -u root</code></pre>
<p>  ※最初はMysqlのroot権限にパスワードがないので、この後でパスワード設定に移ります。</li>
<li>次にデータベースの文字コードを列挙させる。
<pre><code class="color">show variables like "char%";</code></pre>
</li>
<li>filesystem項目以外がUTF-8になっていることを確認して終了。<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_2.jpg" rel="lightbox[pics500]" title="mysql-文字コード確認"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_2.thumbnail.jpg" alt="mysql-文字コード確認" width="240" height="175" class="attachment wp-att-497 " /></a></li>
</ol>
<p class="sub">Mysqlにパスワードを設定</p>
<p>Mysqlのインストール直後は、rootユーザにパスワードが設定されてない(*°∀°)=3<br />
このまま放置するわけにいかないので、パスワードを設定。</p>
<ol>
<li>xamppコントロールパネルなどから、Mysqlサービスを起動。</li>
<li>コマンドプロンプトでmysqladminを使って、パスワードを設定。
<pre><code class="color">mysqladmin -u root -p パスワードに設定する文字列</code></pre>
</li>
<li>パスワード設定後に、そのパスワードを使ってログイン。
<pre><code class="color">mysqladmin -u root -p</code></pre>
</li>
<li>実行後、パスワードを聞いてくるので、設定したパスワードを入力<br />
  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_3.jpg" rel="lightbox[pics500]" title="mysql-パスワード設定"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_3.thumbnail.jpg" alt="mysql-パスワード設定" width="240" height="175" class="attachment wp-att-498 " /></a><br />
  ログインできれば成功。</li>
</ol>
<p class="sub">Mysqlにパスワードを設定２</p>
<p>一度パスワードを設定してしまうと、mysqladminから前に使ったコマンドでパスワードを再設定できないので、通常のパスワード設定方法も紹介。</p>
<ol>
<li>xamppコントロールパネルなどから、Mysqlサービスを起動。</li>
<li>コマンドプロンプトから、とりあえずmysqlにログイン。
<pre><code class="color">mysql -u root</code></pre>
<p>  すでにパスワードを設定している場合は、「-p」コマンドも付け加えてパスワードも入力。</li>
<li>ログイン後、以下コマンドを実行。
<pre><code class="color">set password for root@localhost=password('設定するパスワード');</code></pre>
<p>  <a href="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_4.jpg" rel="lightbox[pics500]" title="mysql-パスワード設定2"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/2008/11/2008-11-27_mysql_4.thumbnail.jpg" alt="mysql-パスワード設定2" width="240" height="175" class="attachment wp-att-499 " /></a><br />
  こっちだと何度でも再設定できる。</li>
</ol>
<p>ちょっと1ページに詰め込みすぎたかもしれない。</p>
<p>明日、<a href="http://picslog.picsmate.net/2008/11/28/522/">「Aptana」の初期設定方法</a>も書く予定。</p>
<p>関連情報：<br />
<a href="http://www.apachefriends.org/jp/xampp-windows.html" rel="external">apache friends &#8211; xampp for windows</a></p>
<p>関連記事：<br />
<a href="http://picslog.picsmate.net/2008/11/26/480/">Windows XPを再インストール中</a><br />
<a href="http://picslog.picsmate.net/2008/11/21/447/">コマンドプロンプトの覚え書き</a></p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2008/11/27/500/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpの文字、数値の比較関連、実行結果をずらっと一覧にした。</title>
		<link>http://picslog.picsmate.net/2008/03/07/206/</link>
		<comments>http://picslog.picsmate.net/2008/03/07/206/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 13:57:41 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[WEB開発]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/2008/03/07/206/</guid>
		<description><![CDATA[
字列や数値の比較で検索して、このサイトへ来られる方が多いんですね。
説明ベタなために、非常に読みにくくて申し訳ないので、実行した時の結果を一覧・・・でもないけどずらっと並べてみました。
多少、説明も入れたけど・・・。
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picslog.picsmate.net/wp/wp-content/uploads/20080307.jpg" rel="lightbox[pics-1204897340]" title="20080307.jpg"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/20080307.thumbnail.jpg" width="329" height="239" alt="20080307.jpg" class="imageframe" /></a><br />
字列や数値の比較で検索して、このサイトへ来られる方が多いんですね。<br />
説明ベタなために、非常に読みにくくて申し訳ないので、実行した時の結果を一覧・・・でもないけどずらっと並べてみました。</p>
<p>多少、説明も入れたけど・・・。<br />
<span id="more-206"></span></p>
<p>以下、実行内容と結果いろいろ（「//～」のコメント部分が実行結果）</p>
<p class="sub">通常の比較（==）を使った場合。</p>
<pre><code class="color">var_dump('string' == 0); // bool(true)
var_dump('string' == '0'); // bool(false)
var_dump('string' == 1); // bool(false)
var_dump('string' == '1'); // bool(false)
var_dump('1string' == 1); // bool(true)
var_dump('1string' == '1'); // bool(false)
</code></pre>
<p>通常の比較だとどちらか一方に数値が入ると、強制的にもう一方の値もint型にキャストされます。<br />
文字列は0、もしくは先頭から連続している数値になる。<br />
結果が「ture」になっているものが想定外。</p>
<p class="sub">通常の比較（==）を使って、ちょっと意地悪をしてみる。</p>
<pre><code class="color">var_dump('string' == -1); // bool(false)
var_dump('string' == '-1'); // bool(false)
var_dump('-1string' == -1); // bool(true)
var_dump('-1string' == '-1'); // bool(false)
</code></pre>
<p>「-1」など負の数値と比較する場合、文字列の先頭に「-」が付いていると負の数値に変換されるため、たまに結果がおかしくなる。<br />
これも「ture」になっているものは想定外。</p>
<p class="sub">同型比較（===）を使った場合。</p>
<pre><code class="color">var_dump('string' === 0); // bool(false)
var_dump('string' === '0'); // bool(false)
var_dump('string' === 1); // bool(false)
var_dump('string' === '1'); // bool(false)
var_dump('1string' === 1); // bool(false)
var_dump('1string' === '1'); // bool(false)
</code></pre>
<p>同型比較を使うと自動的に方変換を行わなくなるので、比較結果は意図した通りになる。</p>
<p class="sub">同型比較（===）では、意地悪できない。</p>
<pre><code class="color">var_dump('string' === -1); // bool(false)
var_dump('string' === '-1'); // bool(false)
var_dump('-1string' === -1); // bool(false)
var_dump('-1string' === '-1'); // bool(false)
</code></pre>
<p>型変換が行われないので、ちょっと値に変化をつけてみても、当然正常に比較される。</p>
<p class="sub">strcmp関数（文字列の比較）を使った場合。</p>
<pre><code class="color">var_dump(0 == strcmp('string', 0)); // bool(false)
var_dump(0 == strcmp('string', '0')); // bool(false)
var_dump(0 == strcmp('string', 1)); // bool(false)
var_dump(0 == strcmp('string', '1')); // bool(false)
</code></pre>
<p>strcmp()は文字列を比較する関数なので、両方の値を文字列にキャストする。<br />
一方の値が数値であっても、数値は文字列に変換されるので「string」が「0」になったり、「1string」が「1」になるような事はないので、結果は正常。<br />
（strcmpは比較した文字列の大きさを返すので、0を返した場合に同一の値と判断する。<br />
なので、同じ値であることを確認する場合は「0==strcmp(A,B)」などのように書く）</p>
<p class="sub">strcmp関数（文字列の比較）に論理型 (boolean)を入れてみた場合。</p>
<pre><code class="color">var_dump(0 == strcmp(0, false)); // bool(false)
var_dump(0 == strcmp(0, true)); // bool(false)
var_dump(0 == strcmp(1, false)); // bool(false)
var_dump(0 == strcmp(1, true)); // bool(true)
</code></pre>
<p>論理型が文字列にキャストされるため、結果はちょっとおかしくなる。<br />
でも、外部から論理型の値が来ることはないだろうから、プログラマサイドで解決できる問題かな。<br />
（falseはint型に変換すると「0」で、文字列にすると空文字「&#8221;"」）</p>
<p>やはり4番目の「ture」になっているものが想定外だが、もともと文字列を比較する関数だから仕方がない。</p>
<p class="sub">オーバーフローする値の数値文字列の比較。</p>
<pre><code class="color">var_dump('11111111111111111' == '11111111111111112'); // bool(true)
var_dump('11111111111111111' === '11111111111111112'); // bool(false)
var_dump(0 == strcmp('11111111111111111', '11111111111111112')); // bool(false)
</code></pre>
<p>通常の比較（==）の場合、どっちも文字列っぽいけど、キャストが行われるので注意。<br />
なので、1つ目の結果が「ture」になっているものは想定外。</p>
<p>文字列の比較はできるだけstrcmp関数を使えってことですね。</p>
<p class="sub">キャストによる値の変化。</p>
<pre style="height:300px"><code class="color">// NULL
$value = null;
var_dump(
    (int)$value, // int(0)
    (string)$value, // string(0) ""
    (float)$value // float(0)
);
// 論理型
$value = false;
var_dump(
    (int)$value, // int(0)
    (string)$value, // string(0) ""
    (float)$value // float(0)
);
$value = true;
var_dump(
    (int)$value, // int(1)
    (string)$value, // string(1) "1"
    (float)$value // float(1)
);
// 文字列
$value = 'string';
var_dump(
    (int)$value, // int(0)
    (string)$value, // string(6) "string"
    (float)$value // float(0)
);
$value = '1string';
var_dump(
    (int)$value, // int(1)
    (string)$value, // string(7) "1string"
    (float)$value // float(1)
);
$value = '-1string';
var_dump(
    (int)$value, // int(-1)
    (string)$value, // string(7) "-1string"
    (float)$value // float(-1)
);
</code></pre>
<p class="sub">論理型への型変換。</p>
<pre><code class="color">var_dump(
    (boolean)0, // bool(false)
    (boolean)1, // bool(true)
    (boolean)-1, // bool(true)
    (boolean)null, // bool(false)
    (boolean)"", // bool(false)
    (boolean)" ", // bool(true)
    (boolean)'string', // bool(true)
    (boolean)'string', // bool(true)
);
</code></pre>
<p class="sub">数値型ではオーバフローする値の文字列の型変換</p>
<pre><code class="color">$value = '11111111111111111';
var_dump(
    $value, // string(17) "11111111111111111"
    (int)$value, // int(2147483647)
    (float)$value // float(1.11111111111E+16)
);
$value = '11111111111111112';
var_dump(
    $value, // string(17) "1111111111111112"
    (int)$value, // int(2147483647)
    (float)$value // float(1.11111111111E+16)
);
</code></pre>
<p>型変換が加わると、「11111111111111111」も「11111111111111112」も値が詰められるので、同じ内容になってしまいます。</p>
<p class="sub">ついでに、ちょっと危うそうな事例</p>
<p>in_array関数を使って配列の中に値が存在するか確かめる。</p>
<pre><code class="color">$value = 'string';
$array = array(0, 1, 2);
var_dump(in_array($value, $array)); // bool(true)
</code></pre>
<p>え、配列もやばいんだ・・・。</p>
<p>in_arrayはあんまり使ったことがないんだけど、これも問題あるんだね。<br />
もちろんarray_searchも一緒！<br />
（これもやっぱり仕様です。）</p>
<pre><code class="color">// 配列に最初から文字列を入れようか。
$value = 'string';
$array = array('0', '1', '2');
var_dump(in_array($value, $array)); // bool(false)
// もしくは検索前に文字列に戻す。
$value = 'string';
$array = array(0, 1, 2);
var_dump(in_array($value, array_map('strval', $array))); // bool(false)
</code></pre>
<p>ここまでしないととダメ？</p>
<p>と、大体こんなものだろうか？<br />
前回の記事見たく、ぐだぐだ書いているよりはわかりやすい気もするんだけど・・・。</p>
<p>内容に補足や誤りがあれば、ぜひコメントください。</p>
<p>気を抜いたら、ちょっとまずいプログラムになりそうだけど・・・。<br />
それでも大好きですよ！PHP！(>▽< )ノ</p>
<p>PHP6からマルチバイトが標準化されるんだっけ？<br />
今回の記事にまったく関係ないけど(^^;</p>
<p>参考情報：<br />
<a href="http://php.benscom.com/manual/ja/types.comparisons.php" rel="external">PHP- PHP 型の比較表 &#8211; Manual　</p>
<p>関連記事：<br />
<a href="http://picslog.picsmate.net/2007/09/13/131/">[続] PHPで文字列比較を行う場合の注意と、一応数値も抑えておいたほうが・・・</a><br />
<a href="http://picslog.picsmate.net/2007/08/25/106/">PHPで文字列の比較を行う場合の注意 </a></p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2008/03/07/206/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPの文字列比較ネタが人気らしい。</title>
		<link>http://picslog.picsmate.net/2007/12/18/172/</link>
		<comments>http://picslog.picsmate.net/2007/12/18/172/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 12:58:33 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/2007/12/18/172/</guid>
		<description><![CDATA[なんだか最近アクセスが少なくなってたPHPの文字列ネタ。
急にアクセス増えたと思ってると、どうも「phpspot開発日誌」さんにリンクを張って頂いてたようです。

ブログにコメントが入ったようだったので見てると、「PHP [...]]]></description>
			<content:encoded><![CDATA[<p>なんだか最近アクセスが少なくなってたPHPの文字列ネタ。</p>
<p>急にアクセス増えたと思ってると、どうも「<a href="http://phpspot.org/blog/" rel="external">phpspot開発日誌</a>」さんにリンクを張って頂いてたようです。<br />
<span id="more-172"></span></p>
<p>ブログにコメントが入ったようだったので見てると、「<a href="http://phpspot.org/blog/archives/2007/12/php0.html" rel="external">PHPで「特定」文字列と数値0の比較が等価になるカラクリ-phpspot開発日誌</a>」の記事で参考にあげられていた「<a href="http://dara-j.asablo.jp/blog/" rel="external">dara-j</a>」さんでした。</p>
<p>内容を読んでると、どうもphpspot開発日誌さんのところで、うちの記事がリンク張られているらしい。</p>
<p>確かにアクセスログを見てみると、リファラにphpspotさんが大量に入っていました(-▽-</p>
<p>いつも見ている側だっただけに、ちょっと恥ずかしい気持ちもありますが(^^;</p>
<p>それはさておき、当ブログ内でも数値比較について記事を書きましたが、dara-jさんのページの「<a href="http://dara-j.asablo.jp/blog/2007/12/18/2517790" rel="external">$なし変数のカラクリと数値変換のお話</a>」でわかりやすくまとめられていたのでご紹介。</p>
<blockquote cite="http://dara-j.asablo.jp/blog/2007/12/18/2517790"><p>17桁の整数 → INTの範囲外なので自動的にFLOATに → FLOATの桁精度が足りなく丸め誤差発生 → 同じ値ってことで。</p></blockquote>
<p>一言でまとまっていてわかりやすい！</p>
<p>定数の事も書かれていましたが、ＰＨＰはこういうものだとすっかり気にならなくなってしまっていましたw</p>
<p>・・・ちょっとピンチ！？<br />
私もＰＨＰに丸められつつあるようです。</p>
<p>改めて言われると確かにおかしな動作ですよね。</p>
<p>以前の文字列、数値比較の内容の実行結果がわかりにくかったので、実行結果だけでまとめてみました。<br />
<a href="http://picslog.picsmate.net/2008/03/07/206/">phpの文字、数値の比較関連、実行結果をずらっと一覧にした。</a></p>
<p>関連記事：<br />
<a href="http://picslog.picsmate.net/2007/09/19/132/">PHPで1行コメントとPHP括弧の同時利用に関しての注意。</a><br />
<a href="http://picslog.picsmate.net/2007/09/13/131/">[続] PHPで文字列比較を行う場合の注意と、一応数値も抑えておいたほうが・・・</a><br />
<a href="http://picslog.picsmate.net/2007/08/25/106/">PHPで文字列の比較を行う場合の注意 </a></p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2007/12/18/172/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPで1行コメントとPHP括弧の同時利用に関しての注意。</title>
		<link>http://picslog.picsmate.net/2007/09/19/132/</link>
		<comments>http://picslog.picsmate.net/2007/09/19/132/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 12:06:10 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[WEB開発]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/2007/09/19/132/</guid>
		<description><![CDATA[
「//」や「#」とPHP括弧を同時に利用した場合の注意です。
これに関しては、問題は少ないと思うけどたまに「あれっ？」てなる(かもしれない)ので書いておきます。
スクリプトを実行した時点で気づくと思うので、特に問題には [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picslog.picsmate.net/wp/wp-content/uploads/20070919.jpg" rel="lightbox[pics-1190199343]" title="20070919.jpg"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/20070919.thumbnail.jpg" width="320" height="240" alt="20070919.jpg" class="imageframe" /></a><br />
「//」や「#」とPHP括弧を同時に利用した場合の注意です。</p>
<p>これに関しては、問題は少ないと思うけどたまに「あれっ？」てなる(かもしれない)ので書いておきます。</p>
<p>スクリプトを実行した時点で気づくと思うので、特に問題にはならないと思うけど。<br />
<span id="more-132"></span></p>
<p>というわけで「//」や「#」を利用してコメント内に「< ?php ?>」を書いた場合の参考スクリプトを記述してみます。</p>
<pre><code class="color">&lt;?php
//「//」を記述すると行末までコメントになります。
//”&lt;?php” 以降はPHPスクリプトで “?&gt;”はPHPスクリプトの終了です。
echo “hello!”; //echoでページに出力を行います。
//サンプルは終了です。
?&gt;</code></pre>
<p>すさまじく親切な（というよりうっとおしい）ソースですが、実行するには致命的な問題があります。</p>
<p><a href="http://picsmate.net/sample/20070919/code01.php" rel="external">PHPファイルを実行</a></p>
<p>結果をみると予想外にいろいろな言葉が出力されています(^^;</p>
<pre><code class="color">“はPHPスクリプトの終了です。 echo “hello!”; //echoでページに出力を行います。 //サンプルは終了です。　?&gt;</code></pre>
<p>どういうことかというと、コメント内の文字列は基本的にコメントとして扱われるものの、PHP括弧のみコメントとして扱われないというわけ。</p>
<p>上記サンプルは「//」でコメントアウトしていますが、「#」でコメントアウトした場合も同様の現象が発生します。</p>
<p>コメント内にPHP括弧を書く場合は「/* */」を利用することでコメントとして扱うことが出来ます。</p>
<p>上記の参考スクリプトを正しく処理するように書き直すと</p>
<pre><code class="color">&lt;?php
/*「//」を記述すると行末までコメントになります。
  ”&lt;?php” 以降はPHPスクリプトで ”?&gt;”はPHPスクリプトの終了です。*/
echo “hello!”; //echoでページに出力を行います。
//サンプルは終了です。
?&gt;</code></pre>
<p>問題のスクリプトを書いてしまっても、実行直後に「なんかおかしい！」と気づくと思うので、大事にいたることは無いと思いますが。</p>
<p>稼動中のサーバなどでやってしまうと、「コメント以降の<strong>ソースが丸見え</strong>！！」なんて羽目になるかもしれません・・・。</p>
<p>PHP技術者の方はコメントだけだからといって、くれぐれもプログラムの実行チェックを怠らないようにしましょう。</p>
<p>かなり初心者向けの内容なので、参考する人がどれだけいるか・・・。</p>
<p>以下、参考ページ<br />
<a href="http://www.php.net/manual/ja/language.basic-syntax.comments.php">PHP- コメント &#8211; Manual</a></p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2007/09/19/132/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[続] PHPで文字列比較を行う場合の注意と、一応数値も抑えておいたほうが・・・</title>
		<link>http://picslog.picsmate.net/2007/09/13/131/</link>
		<comments>http://picslog.picsmate.net/2007/09/13/131/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 15:19:28 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[WEB開発]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[メモ]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/2007/09/13/131/</guid>
		<description><![CDATA[
「PHPで文字列型の比較を行う場合の注意」でちょっとだけPHPの文字列比較について書いたんですが、INT型の数値もある程度大きな数値になると危険なので追記しておきます。
発生する確率はそれほど高くないかもしれませんが・ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picslog.picsmate.net/wp/wp-content/uploads/20070913.jpg" rel="lightbox[pics-1189610237]" title="20070913.jpg"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/20070913.thumbnail.jpg" width="320" height="240" alt="20070913.jpg" class="imageframe" /></a><br />
「<a href="http://picslog.picsmate.net/2007/08/25/106/">PHPで文字列型の比較を行う場合の注意</a>」でちょっとだけPHPの文字列比較について書いたんですが、INT型の数値もある程度大きな数値になると危険なので追記しておきます。</p>
<p>発生する確率はそれほど高くないかもしれませんが・・・(^^;<br />
<span id="more-131"></span></p>
<p>大きな数値を比較する際には注意が必要なのですが、下記が問題のあるコードです。</p>
<pre><code class="color">&lt;?php
var_dump(11111111111111111 == 11111111111111112);
?&gt;</code></pre>
<p>ぱっと見た感じ問題はなさそうに見えますが、実行してみると・・・</p>
<pre><code class="color">bool(true)</code></pre>
<p>終末数値が1と2なので結果にfalseを期待すると思いますが、実際にはtrueが返されます。</p>
<p>ちなみに「===」やstrcmp関数を使って比較しても結果は同じです。</p>
<pre><code class="color">&lt;?php
var_dump(11111111111111111 === 11111111111111112);
//bool(true)
var_dump(0 == strcmp(11111111111111111,11111111111111112));
//bool(true)
?&gt;</code></pre>
<p>これはどういうことかというとINT型の範囲を超えた時点（2147483648以上）でオーバーフローが発生して、数値はFLOAT型に変更されます。</p>
<pre><code class="color">&lt;?php
var_dump(2147483648);//float(2147483648)
var_dump(11111111111111111);//float(1.11111111111E+16)
var_dump(11111111111111112);//float(1.11111111111E+16)
?&gt;
</code></pre>
<p>FLOAT型に変換された場合に小さい位の方から「E+*」にまとめられてしまうんだけど、「11111111111111111」と「11111111111111112」の結果を見てもらったらわかるように、まとめられた部分の数値が切り捨てられているので比較した場合の結果がおかしい。</p>
<p>SQLのBIGINTを利用した大きな数値を扱う場合に一部注意が必要かも。</p>
<p>型を文字列にして比較すると「==」以外では正常な結果を返してくれます。</p>
<pre><code class="color">// 「==」で比較
var_dump((string)"11111111111111111" == (string)"11111111111111112");
//bool(true)

// 「===」で比較
var_dump((string)"11111111111111111" === (string)"11111111111111112");
//bool(false)

// 「strcmp」で比較
var_dump(0 == strcmp((string)"111111111111111111",  (string)"111111111111111112"));
//bool(false)
</code></pre>
<p>正確に比較を行う場合には、確実に文字型になったものを取得した上、strcmp関数を使うのが一番硬いのかな。</p>
<p>マニュアルを読んでいたら、以下で紹介されていました。</p>
<blockquote cite="http://php.benscom.com/manual/ja/language.types.string.php"><p>
watch out when comparing strings that are numbers. this example:<br />
<code><br />
&lt;?php</p>
<p>$x1 = '111111111111111111';<br />
$x2 = '111111111111111112';</p>
<p>echo ($x1 == $x2) ? "true\n" : "false\n";</p>
<p>?&gt;<br />
</code><br />
will output &#8220;true&#8221;, ・・・
</p></blockquote>
<p>上の記事だとシングルクォートで囲っているので、(string)->(int)->(float)という感じで型が変換されてしまってるってことか。<br />
if文で比較する場合には少なくとも比較には「==」は使わないほうがいいということですね。</p>
<p>さらに注意すべきは前回書いた文字列比較にしても、今回の数値の比較にしてもif文だけでなく、switch文でも同様の評価を受けてしまいます。</p>
<p>というわけで結構困らせてくれるPHPの比較ですが、これなしでプログラムは組めないのでしっかり抑えておかないと(^^;</p>
<p>文字列、数値比較の内容の実行結果がわかりにくかったので、実行結果だけでまとめてみました。<br />
<a href="http://picslog.picsmate.net/2008/03/07/206/">phpの文字、数値の比較関連、実行結果をずらっと一覧にした。</a></p>
<p>関連情報：<br />
<a href="http://php.benscom.com/manual/ja/language.types.string.php">PHP- 文字列 &#8211; Manual</a><br />
<a href="http://php.benscom.com/manual/ja/language.types.integer.php">PHP- 整数 &#8211; Manual</a></p>
<p>2007-8-14：一部表記を修正</p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2007/09/13/131/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHPで文字列の比較を行う場合の注意</title>
		<link>http://picslog.picsmate.net/2007/08/25/106/</link>
		<comments>http://picslog.picsmate.net/2007/08/25/106/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 17:53:52 +0000</pubDate>
		<dc:creator>Mizugame</dc:creator>
				<category><![CDATA[WEB開発]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://picslog.picsmate.net/2007/08/25/106/</guid>
		<description><![CDATA[
本当はPHPのメリットのはずなんだけど、開発する側の混乱の元になる自動型変換。
それにしても、これは無いよなーってところをメモ。

この辺りはおさらいするまでも無いんだけど、普通に便利そうで結構迷惑なところ。
&#60; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picslog.picsmate.net/wp/wp-content/uploads/20070825.jpg" rel="lightbox[pics-1187977650]" title="20070825.jpg"><img src="http://picslog.picsmate.net/wp/wp-content/uploads/20070825.thumbnail.jpg" width="320" height="240" alt="20070825.jpg" class="imageframe" /></a><br />
本当はPHPのメリットのはずなんだけど、開発する側の混乱の元になる自動型変換。<br />
それにしても、これは無いよなーってところをメモ。<br />
<span id="more-106"></span></p>
<p>この辺りはおさらいするまでも無いんだけど、普通に便利そうで結構迷惑なところ。</p>
<pre><code class="color">&lt;?php var_dump(false == 0); //bool(true) ?&gt;
&lt;?php var_dump(null == 0); //bool(true) ?&gt;
</code></pre>
<p>まぁ、ここは比較演算子を「===」に変えればすむのでとりあえず。<br />
・・・ただこっちは結構厄介。</p>
<pre><code class="color">&lt;?php var_dump(“string” == 0); //bool(true) ?&gt;
</code></pre>
<p>むぅ、これはちょっと・・・。</p>
<p>なんか仕様を通り越して悪意すら感じる。<br />
とりあえず文字列型で無理やり固定してしまって</p>
<pre><code class="color">&lt;?php var_dump(“string” === (string)0); //bool(false) ?&gt;
&lt;?php var_dump(“string” === “0″); //bool(false) ?&gt;</code></pre>
<p>なんかで対応しても良いんだけど、結構めんどくさいので</p>
<pre><code class="color">&lt;?php var_dump(strcmp(“string”, 0) == 0); //bool(false) ?&gt;</code></pre>
<p>のように、strcmp関数で対応するのが良いみたい。</p>
<p>比較演算子で書くのが慣れてしまっているようなら、厳密に型比較で「===」をつかえば良いのかな？</p>
<pre><code class="color">&lt;?php var_dump((bool)0); //bool(false) ?&gt;
&lt;?php var_dump((bool)1); //bool(true) ?&gt;</code></pre>
<p>のようなこともあるので、極めて厳密な処理にはならない。</p>
<p>比較演算子＋型固定にしてもstrcmp関数を使うにしても「true」と「1」や「false」と「0」の比較は通ってしまうので、論理型 (boolean) の比較が必要な場合は分けないと仕方が無いか。</p>
<p>なかなか、面倒ではあるけど大事な処理なので。<br />
・・・頭が痛くなる。</p>
<p>ちなみにfloat型とかを(int)で型指定した時点で整数に戻せる辺りで、もしやと思ったけど</p>
<pre><code class="color">&lt;?php var_dump(“1string” == 1); //bool(true) ?&gt;</code></pre>
<p>・・・やっぱり。<br />
結構変な比較が通ってしまうようですね。</p>
<p>しかも仕様らしいし。<br />
参考情報：<br />
「<a href="http://www.php.net/manual/ja/language.types.string.php">PHP- 文字列 &#8211; Manual</a>」</p>
<p>文字列、数値比較の内容の実行結果がわかりにくかったので、実行結果だけでまとめてみました。<br />
<a href="http://picslog.picsmate.net/2008/03/07/206/">phpの文字、数値の比較関連、実行結果をずらっと一覧にした。</a></p>
]]></content:encoded>
			<wfw:commentRss>http://picslog.picsmate.net/2007/08/25/106/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
