<?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>(DxD)∞ &#187; PHP全般</title>
	<atom:link href="http://dxd8.com/archives/category/php/php-general/feed/" rel="self" type="application/rss+xml" />
	<link>http://dxd8.com</link>
	<description>Day by Day Infinity - Webな日々(HTML/XHTML/CSS/JavaScript/PHP/CMS)</description>
	<lastBuildDate>Fri, 23 Jul 2010 16:23:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DreamHostでPHPのエラーログを出力</title>
		<link>http://dxd8.com/archives/150/</link>
		<comments>http://dxd8.com/archives/150/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 00:00:10 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[サーバ]]></category>
		<category><![CDATA[DreamHost]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dxd8.com/?p=292</guid>
		<description><![CDATA[DreamHostでPHPのエラーログを出力しようとしてはまりました。



次のような行を「.htaccess」に追加したものの、まったく反映されませんでした。

php_flag display_erro [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dreamhost.com/r.cgi?439363">DreamHost</a>でPHPのエラーログを出力しようとしてはまりました。</p>

<span id="more-292"></span>

<p>次のような行を「.htaccess」に追加したものの、まったく反映されませんでした。</p>

<pre><code>php_flag display_errors off
php_flag display_startup_errors off
php_flag log_errors on
php_value error_log "/home/<var>ユーザ名</var>/logs/<var>ドメイン</var>/php_error.log"</code></pre>

<p>それもそのはず、<abbr title="Common Gateway Interface">CGI</abbr>モードでは「php_flag」や「php_value」は使えません。しばらく、あちこちいじった後に気付きました。</p>

<p>PHPの設定を変更するためには、「<a href="http://dxd8.com/archives/148/">DreamHostの初期設定(SSH接続・FastCGIほか)</a>」でコピーした「php.ini」を修正することになりますが、ここで一つ問題が発生。サーバ全体で「php5.cgi」と「php.ini」を共有するようにしているため、エラーログのファイル名をドメインごとに個別に指定することができません。</p>

<p>かといって、ドメインごとに「php5.cgi」と「php.ini」をコピーする方法にすると、Cronで全ての「php5.cgi」を自動更新するのが面倒になりますし、外部からのアクセスを遮断するために「.htaccess」を置かなければいけなくなります。</p>

<p>どっちも微妙な感じですが他の方法もわからないので、結局、今のサーバ全体で共有する方法でいくことにしました。一般的な共用レンタルサーバでは、そもそもドメインごとにPHPの設定を変えることができないのが普通ですし、間違えて「php.ini」を公開してしまう危険も避けられます。</p>

<p>エラーログはごっちゃまぜになってしまいますが、そんなに困らないだろうし、必要であれば、特定のドメインだけ個別の「php5.cgi」と「php.ini」を使うことはできますしね。</p>

<p>DreamHostを検討中の方は、<a href="http://dxd8.com/archives/147/">最大$200割引+アルファのクーポンコード(割引コード)</a>を配布していますので、是非、ご利用ください。</p>

	タグ: <a href="http://dxd8.com/archives/tag/dreamhost/" title="DreamHost" rel="tag">DreamHost</a>, <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a>, <a href="http://dxd8.com/archives/tag/%e3%82%b5%e3%83%bc%e3%83%90/" title="サーバ" rel="tag">サーバ</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/169/" title="シェルスクリプトとCronでファイルを自動バックアップ&amp;ローテーション (2008年11月9日)">シェルスクリプトとCronでファイルを自動バックアップ&amp;ローテーション</a> (0)</li>
	<li><a href="http://dxd8.com/archives/142/" title="CodeIgniterで管理ページを作成する (2008年7月5日)">CodeIgniterで管理ページを作成する</a> (1)</li>
	<li><a href="http://dxd8.com/archives/109/" title="PHP5のコンストラクタ関数は__construct() (2008年4月12日)">PHP5のコンストラクタ関数は__construct()</a> (1)</li>
	<li><a href="http://dxd8.com/archives/189/" title="期間限定！海外共用サーバー「DreamHost」が$70引き (2009年4月8日)">期間限定！海外共用サーバー「DreamHost」が$70引き</a> (0)</li>
	<li><a href="http://dxd8.com/archives/211/" title="CakePHP 1.3でのトランザクション処理の方法と注意点 (2010年6月23日)">CakePHP 1.3でのトランザクション処理の方法と注意点</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/150/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeIgniter徹底入門が発売&amp;出版キャンペーン実施中</title>
		<link>http://dxd8.com/archives/123/</link>
		<comments>http://dxd8.com/archives/123/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 00:00:31 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[ニュース]]></category>
		<category><![CDATA[買い物]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[本]]></category>

		<guid isPermaLink="false">http://dxd8.com/archives/123/</guid>
		<description><![CDATA[シンプルかつ高速なPHPフレームワーク、CodeIgniterの解説本、CodeIgniter徹底入門が発売されました。




  


春頃に出るとの話でしたが、ようやく発売となったようです。Code [...]]]></description>
			<content:encoded><![CDATA[<p>シンプルかつ高速なPHPフレームワーク、CodeIgniterの解説本、<a href="http://www.amazon.co.jp/gp/product/4798116769?ie=UTF8&#038;tag=dxd8-22&#038;linkCode=as2&#038;camp=247&#038;creative=1211&#038;creativeASIN=4798116769">CodeIgniter徹底入門</a><img src="http://www.assoc-amazon.jp/e/ir?t=dxd8-22&#038;l=as2&#038;o=9&#038;a=4798116769" width="1" height="1" alt="" />が発売されました。</p>

<span id="more-240"></span>

<ul class="figure">
  <li><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798116769/dxd8-22/ref=nosim/"><img src="http://ecx.images-amazon.com/images/I/61E7sILrj7L._SL160_.jpg" alt="CodeIgniter徹底入門" /></a></li>
</ul>

<p>春頃に出るとの話でしたが、ようやく発売となったようです。CodeIgniterはシンプルさが気になっていたので、これは購入してみようと思います。</p>

<p>目次はないのかなと思ったら、CodeIgniterのWikiに「<a href="http://codeigniter.jp/tettei/">『CodeIgniter徹底入門』情報ページ</a>」がありました。ページ数は632ページで、リファレンス付きの結構なボリュームです。<a href="http://userguide.cilab.info/">ユーザガイド</a>と同じ内容ということでもなさそう
で、サンプルやレシピ集も実用的な感じなのが良さそうです。</p>

<p>そして、「<a href="http://codeigniter.jp/cp/campaign">『CodeIgniter徹底入門』出版記念キャンペーン</a>」というのをやっているようです。どういうものかわからないので、ちょっと微妙な特典の気もしますが、せっかくなので申し込んでみようと思います。購入される方は、生原稿と比べながら読んでみると面白いかもしれませんね。</p>

<p>以前に触っていたCakePHPはあまり使う機会がなく、CodeIgniterも頻繁に使う機会があるかというと微妙なのですが、こちらは小物を作るときにも使いやすそうな印象ではあります。セッション周りに癖があるようなので、素人でもそれなりに堅い枠組みを利用できることを期待している身としては、その辺りだけが気になる点です。</p>

<p>所詮、個人での用途は知れているわけで、あれこれ覚えても使わないうちに忘れてしまうと思ったり、<abbr title="Content Management System">CMS</abbr>とフレームワークの良さを兼ね備えたMODx(最近、一番、使用頻度が高い)が0.9.7になれば、MODxだけで事足りるようになるのかなと期待していたりするのですが、とりあえずは届くのを楽しみにします。</p>

	タグ: <a href="http://dxd8.com/archives/tag/codeigniter/" title="CodeIgniter" rel="tag">CodeIgniter</a>, <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a>, <a href="http://dxd8.com/archives/tag/%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%b9/" title="ニュース" rel="tag">ニュース</a>, <a href="http://dxd8.com/archives/tag/%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%af%e3%83%bc%e3%82%af/" title="フレームワーク" rel="tag">フレームワーク</a>, <a href="http://dxd8.com/archives/tag/%e6%9c%ac/" title="本" rel="tag">本</a>, <a href="http://dxd8.com/archives/tag/%e8%b2%b7%e3%81%84%e7%89%a9/" title="買い物" rel="tag">買い物</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/64/" title="JavaScript 第5版 - 7章 オブジェクトと配列(1) (2008年2月20日)">JavaScript 第5版 - 7章 オブジェクトと配列(1)</a> (0)</li>
	<li><a href="http://dxd8.com/archives/182/" title="XAMPPの設定(バーチャルホストなど)を別フォルダに分ける方法 (2009年1月24日)">XAMPPの設定(バーチャルホストなど)を別フォルダに分ける方法</a> (0)</li>
	<li><a href="http://dxd8.com/archives/184/" title="Adobe Illustrator CS4の購入とレビュー (2009年2月19日)">Adobe Illustrator CS4の購入とレビュー</a> (2)</li>
	<li><a href="http://dxd8.com/archives/22/" title="LLフレームワークBOOKSシリーズ Fast CakePHPが発売 (2008年1月9日)">LLフレームワークBOOKSシリーズ Fast CakePHPが発売</a> (0)</li>
	<li><a href="http://dxd8.com/archives/150/" title="DreamHostでPHPのエラーログを出力 (2008年8月5日)">DreamHostでPHPのエラーログを出力</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/123/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHPで変数のクラス名からインスタンスを生成する</title>
		<link>http://dxd8.com/archives/110/</link>
		<comments>http://dxd8.com/archives/110/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 00:00:27 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dxd8.com/archives/110/</guid>
		<description><![CDATA[PHPで、あらかじめ変数に代入しているクラス名を使って、そのクラスのインスタンスを生成するにはどうすればよいか調べてみました。



きっと、そういう関数があるんだろうなあ、あるいはeval()すればできるだろう [...]]]></description>
			<content:encoded><![CDATA[<p>PHPで、あらかじめ変数に代入しているクラス名を使って、そのクラスのインスタンスを生成するにはどうすればよいか調べてみました。</p>

<span id="more-206"></span>

<p>きっと、そういう関数があるんだろうなあ、あるいはeval()すればできるだろうなあと思いつつ、なんとなく思い立った方法で試してみたらできてしまいました。</p>

<pre><code class="php">$class = 'Product';
$myProduct = new $class();</code></pre>

<p>だめだと思ったらうまくいってしまったので、試しに次のようなこともしてみました。</p>

<pre><code class="php">$myProduct = new 'Product'();</code></pre>

<p>これはだめでした。</p>
<p>メソッドでも試してみます。</p>

<pre><code class="php">$class = 'Product';
$method = 'getDetail';
$myProduct = new $class();
$class->$method();</code></pre>

<p>上手くいきました。クラス名やメソッド名を文字列にした場合にはエラーが発生しました。</p>
<p>クラスメソッドはどうでしょう？</p>

<pre><code class="php">$class = 'Product';
$method = 'getDetail';
$class::$method();</code></pre>

<p>エラーが発生しました。クラス名やメソッド名を文字列にした場合にもエラーが発生しました。</p>
<p>ついでに関数でも試してみます。</p>

<pre><code class="php">function product() {
    echo 'I am product().';
}

$func = 'product';
$func();</code></pre>

<pre><code class="php">function product() {
    echo 'I am product().';
}

'product'();</code></pre>

<p>どちらもエラーが発生しました。</p>

<p>関数やメソッドは<a href="http://jp2.php.net/manual/ja/function.call-user-func.php">call_user_func()</a>関数で呼び出せますし、やりたいことはできたのでいいのですが、どういう理由でこのような動作になるのかが気になります。PHPマニュアルを見ても、具体的な説明は見つかりませんでした。わかったのは、PHPでは()は関数呼び出し演算子ではないらしいということだけでした。</p>

<p>変数に代入しているのは単なる文字列なわけで、全ての例でエラーが発生してもおかしくないと思っていたので、上手くいく例があるのに驚きました。反対に、最初の例で成功するならば、2番目の例などでエラーが発生することを疑問に思うのは理解不足だからでしょうか？「PHPだから」とかいう理由ではないですよね？謎が残ります…。</p>

	タグ: <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/23/" title="CakePHPでアプリケーションの設定を編集するページを作りたい (2008年1月10日)">CakePHPでアプリケーションの設定を編集するページを作りたい</a> (0)</li>
	<li><a href="http://dxd8.com/archives/85/" title="PHPでのスクレイピングに役立つライブラリ (2008年3月12日)">PHPでのスクレイピングに役立つライブラリ</a> (7)</li>
	<li><a href="http://dxd8.com/archives/76/" title="PHPマニュアルの検索を簡単にしてくれるブックマークレット (2008年3月3日)">PHPマニュアルの検索を簡単にしてくれるブックマークレット</a> (0)</li>
	<li><a href="http://dxd8.com/archives/7/" title="CakePHPで外部からのデータ改竄を防止する (2007年12月29日)">CakePHPで外部からのデータ改竄を防止する</a> (2)</li>
	<li><a href="http://dxd8.com/archives/4/" title="CakePHPでURIの形式を統一する (2007年12月26日)">CakePHPでURIの形式を統一する</a> (4)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/110/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5のコンストラクタ関数は__construct()</title>
		<link>http://dxd8.com/archives/109/</link>
		<comments>http://dxd8.com/archives/109/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 11:36:59 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[オブジェクト指向プログラミング]]></category>

		<guid isPermaLink="false">http://dxd8.com/archives/109/</guid>
		<description><![CDATA[PHP5のコンストラクタ関数について、慣れないことをするとハマるという例です。



今まで、PHPでオブジェクト指向プログラミングと言えば、せいぜい、できもののクラスライブラリを使うか、なんとなくクラスにしてい [...]]]></description>
			<content:encoded><![CDATA[<p>PHP5のコンストラクタ関数について、慣れないことをするとハマるという例です。</p>

<span id="more-205"></span>

<p>今まで、PHPでオブジェクト指向プログラミングと言えば、せいぜい、できもののクラスライブラリを使うか、なんとなくクラスにしている程度だったので、オブジェクト指向に多少のメリットを感じることはあっても、絶対的なメリットを感じることはありませんでした。今回、結構、複雑なことをやろうとしていて、これって、オブジェクト指向の威力が発揮されるケースでは？と思い、PHP5の練習がてらにクラスを作成していました。</p>

<p>調べながら、書きながら、今回のケースでは、オブジェクト指向プログラミングに絶対的なメリットを感じたわけですが、案の定、慣れないことをしたのでハマりました。わかってしまえば本当に単純すぎる間違いで、かなり笑えるわけですが、しばらくハマっていたので記録しておきます。こんな間違いをする人はいないでしょうけど :(</p>

<p>最初に書いたのは次のようなものです。</p>

<pre><code class="php">abstract class Product
{
&nbsp;   protected $db;

&nbsp;   protected function __constructor()
&nbsp;   {
&nbsp;       $this-&gt;db = new Database();
&nbsp;   }

&nbsp;   abstract public function getDetail();
&nbsp;   // 以下、省略
}

abstract class Snack extends Product
{
&nbsp;   protected function __constructor() {
&nbsp;       parent::constructor();
&nbsp;   }

&nbsp;   public function getDetail() {
&nbsp;       $this-&gt;db-&gt;connect();
&nbsp;       // 例なので適当です。
&nbsp;   }
&nbsp;   // 以下、省略
}

final class UmaiBou extends Snack
{
&nbsp;   public function __constructor()
&nbsp;   {
&nbsp;       parent::constructor();
&nbsp;   }
&nbsp;   // 以下、省略
}

$MyUmaiBou = new UmaiBou();</code></pre>

<p>いきなりエラーが発生するわけです。今、見れば、本当にすぐわかる間違いですね。ところが慣れないことをしている上に複雑なことになっているわけで、しばらく悩んだ後に気づいて、<code class="php">constructor()</code>を<code class="php">__constructor()</code>に直しました。</p>

<p>これでうまくいったかに見えたものの、今度は<code class="php">UmaiBou-&gt;db-&gt;connect()</code>が見つからないと言われるわけです。Productクラスのコンストラクタでインスタンスを生成しているはずなのに、どうやってもエラーが消えません。継承の仕方が間違っているのか、Databaseクラスが間違っているのかと見てみても、おかしなところは見つかりません。</p>

<p>ようやく気づいたのは、散々、あちこち見回した後に、UmaiBouクラスのコンストラクタ関数が呼び出されていないのを確認したときです。PHP5のコンストラクタ関数は<code class="php">__construct()</code>です。<code class="php">__constructor()</code>で統一していたせいで、間違いに気づくのに時間がかかりました。紛らわしい :X</p>

<p>最終的に次のようになりました。</p>

<pre><code class="php">abstract class Product
{
&nbsp;   protected $db;

&nbsp;   protected function __construct()
&nbsp;   {
&nbsp;       $this-&gt;db = new Database();
&nbsp;   }

&nbsp;   abstract public function getDetail();
&nbsp;   // 以下、省略
}

abstract class Snack extends Product
{
&nbsp;   protected function __construct() {
&nbsp;       parent::__construct();
&nbsp;   }

&nbsp;   public function getDetail() {
&nbsp;       $this-&gt;db-&gt;connect();
&nbsp;       // 例なので適当です。
&nbsp;   }
&nbsp;   // 以下、省略
}

final class UmaiBou extends Snack
{
&nbsp;   public function __construct()
&nbsp;   {
&nbsp;       parent::__construct();
&nbsp;   }
&nbsp;   // 以下、省略
}

$MyUmaiBou = new UmaiBou();</code></pre>

<p>PHP4の中途半端なオブジェクト指向は、面倒くさいだけであまりメリットを感じられませんでしたが、これからは積極的にオブジェクト指向で作っていこうかなあと思いました。メリットを活かせる規模のものを作ることはほとんどないですけど :p</p>

	タグ: <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a>, <a href="http://dxd8.com/archives/tag/%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/" title="オブジェクト指向プログラミング" rel="tag">オブジェクト指向プログラミング</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/22/" title="LLフレームワークBOOKSシリーズ Fast CakePHPが発売 (2008年1月9日)">LLフレームワークBOOKSシリーズ Fast CakePHPが発売</a> (0)</li>
	<li><a href="http://dxd8.com/archives/76/" title="PHPマニュアルの検索を簡単にしてくれるブックマークレット (2008年3月3日)">PHPマニュアルの検索を簡単にしてくれるブックマークレット</a> (0)</li>
	<li><a href="http://dxd8.com/archives/24/" title="CakePHPでgenerateList()の結果からモデルデータ形式の配列に戻す (2008年1月11日)">CakePHPでgenerateList()の結果からモデルデータ形式の配列に戻す</a> (0)</li>
	<li><a href="http://dxd8.com/archives/85/" title="PHPでのスクレイピングに役立つライブラリ (2008年3月12日)">PHPでのスクレイピングに役立つライブラリ</a> (7)</li>
	<li><a href="http://dxd8.com/archives/5/" title="PHPでコールバック関数にオブジェクトのメソッドを指定する (2007年12月27日)">PHPでコールバック関数にオブジェクトのメソッドを指定する</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/109/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHPでのスクレイピングに役立つライブラリ</title>
		<link>http://dxd8.com/archives/85/</link>
		<comments>http://dxd8.com/archives/85/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 00:00:21 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[クラス]]></category>
		<category><![CDATA[スクレイピング]]></category>
		<category><![CDATA[ライブラリ]]></category>
		<category><![CDATA[関数]]></category>

		<guid isPermaLink="false">http://dxd8.com/archives/85/</guid>
		<description><![CDATA[APIが提供されていないサービスから欲しい情報だけを取得するには、HTMLなどから自前でスクレイピングを行うしかありません。PHPでのスクレイピングに役立つライブラリなどをまとめてみました。



PerlやRu [...]]]></description>
			<content:encoded><![CDATA[<p><abbr title="Application Programming Interface">API</abbr>が提供されていないサービスから欲しい情報だけを取得するには、<abbr title="HyperText Markup Language">HTML</abbr>などから自前でスクレイピングを行うしかありません。PHPでのスクレイピングに役立つライブラリなどをまとめてみました。</p>

<span id="more-153"></span>

<p>PerlやRubyには色々と便利そうなものが見つかるのですが、PHPにはなかなかこれといったものがないですね。</p>

<div class="section">
  <h2>Webスクレイピングライブラリ</h2>
  <dl>
    <dt><a href="http://www.rcdtokyo.com/ucb/contents/i000851.php">HTMLScraping</a></dt>
    <dd><abbr title="HyperText Markup Language">HTML</abbr>を<abbr title="Extensible Markup Language">XML</abbr>化して<abbr title="Document Object Model">DOM</abbr>やXPathで操作できるクラス。主にHTTP_Request+HTMLParser(XML_HTMLSax3を含む)/Tidy+Cache_Liteという構成で、スクレイピングに必要なものが一通り揃っている。ライセンスは<abbr title="Lesser GPL">LGPL</abbr>他。</dd>
    <dt><a href="http://note.openvista.jp/251/">WebScraper</a></dt>
    <dd>シンプルな汎用スクレイピングクラス。HTTP_Client+HTMLParser(XML_HTMLSax3を含む)という構成で、XPathで要素を抽出できる。自分好みにカスタマイズするのに最適。ライセンスは修正<abbr title="Berkeley Software Distribution">BSD</abbr>ライセンス他。</dd>
    <dt><a href="http://www.rhaco.org/">rhaco</a></dt>
    <dd>PHPフレームワーク。WebブラウザをシミュレートするBrowserクラスや、<abbr title="HyperText Markup Language">HTML</abbr>の抽出に便利なSimpleTagクラスがある。ライセンスは修正<abbr title="Berkeley Software Distribution">BSD</abbr>ライセンス。</dd>
    <dt><a href="http://snoopy.sourceforge.net/">Snoopy</a></dt>
    <dd>Webブラウザをシュミレートするクラス。<a href="http://magpierss.sourceforge.net/">MagpieRSS</a>などにも使われている。ライセンスは<del datetime="2008-04-14T23:12:09+09:00"><abbr title="GNU General Public License">GPL</abbr></del><ins datetime="2008-04-14T23:12:09+09:00"><abbr title="Lesser GPL">LGPL</abbr></ins>。</dd>
    <dt><a href="http://www.troywolf.com/articles/php/class_http/">class_http.php</a></dt>
    <dd>キャッシングやユーティリティメソッドを含むスクレイピングクラス。「<a href="http://www.troywolf.com/articles/">Internet Application Code Library</a>」にも便利なライブラリがある。ライセンスは不明。</dd>
    <dt><a href="http://diggin.musicrider.com/">Diggin</a></dt>
    <dd>取得・整形・抽出の処理が全て含まれた本格的なクラスライブラリ。<abbr title="Object Oriented Programming">OOP</abbr>を採用しているため柔軟性が高く、HTMLScrapingをベースにしたアダプターやZend Frameworkのライブラリが標準で含まれている。ライセンスは修正<abbr title="Berkeley Software Distribution">BSD</abbr>ライセンス他。</dd>
  </dl>
  <ins datetime="2010-03-08T15:40:43+09:00"><p>Digginを追加しました。</p></ins>
</div>

<div class="section">
  <h2>外部のリソースを取得するためのライブラリ</h2>
  <dl>
    <dt><a href="http://www.phpfour.com/blog/2008/01/20/php-http-class/">HTTP Class</a></dt>
    <dd><abbr title="Hypertext Transfer Protocol Security">HTTPS</abbr>での接続に対応した<abbr title="Hypertext Transfer Protocol">HTTP</abbr>クラス。外部接続にはcURLかfsockopenを使用する。ライセンスは不明。</dd>
    <dt><a href="http://pear.php.net/package/HTTP_Request/redirected">HTTP_Request</a></dt>
    <dd><abbr title="Hypertext Transfer Protocol">HTTP</abbr>リクエストを簡単に処理できるクラス。PEARパッケージ。ライセンスはPHPライセンス。</dd>
    <dt><a href="http://pear.php.net/package/HTTP_Client">HTTP_Client</a></dt>
    <dd><abbr title="Hypertext Transfer Protocol">HTTP</abbr>リクエストを処理できる高機能なクラス。HTTP_Requestのラッパークラス。PEARパッケージ。ライセンスはPHPライセンス。</dd>
    <dt><a href="http://jp2.php.net/manual/ja/ref.curl.php">CURL関数</a></dt>
    <dd>通信ライブラリである<abbr title="Client for URLs">cURL</abbr>のlibcurlをPHPから使うための関数。</dd>
  </dl>
</div>

<div class="section">
  <h2><abbr title="HyperText Markup Language">HTML</abbr>を修正するためのライブラリ</h2>
  <dl>
    <dt><a href="http://www.rcdtokyo.com/ucb/contents/i000799.php">HTMLParser</a></dt>
    <dd>PEARのXML_HTMLSax3を利用して、<abbr title="HyperText Markup Language">HTML</abbr>を整形式の<abbr title="Extensible Markup Language">XML</abbr>に修正するクラス。ライセンスは<abbr title="Lesser GPL">LGPL</abbr>他。</dd>
    <dt><a href="http://www.php.net/manual/ja/ref.tidy.php">Tidy関数</a></dt>
    <dd>不正な<abbr title="HyperText Markup Language">HTML</abbr>を修正してくれるTidyをPHPから使うための関数。</dd>
  </dl>
</div>

<div class="section">
  <h2><abbr title="HyperText Markup Language">HTML</abbr>や<abbr title="Extensible Markup Language">XML</abbr>を抽出(パース)するためのライブラリ</h2>
  <dl>
    <dt><a href="http://www.jonasjohn.de/lab/htmlsql.htm">htmlSQL</a></dt>
    <dd>SQL風の文法で<abbr title="HyperText Markup Language">HTML</abbr>を抽出できるクラス。ライセンスは修正<abbr title="Berkeley Software Distribution">BSD</abbr>ライセンス。</dd>
    <dt><a href="http://www.phpit.net/code/html-parser-class/">HTML Parser Class</a></dt>
    <dd><abbr title="HyperText Markup Language">HTML</abbr>も<abbr title="Extensible Markup Language">XML</abbr>もパースできるクラス。ライセンスは不明。</dd>
    <dt><a href="http://pear.php.net/package/XML_Parser">XML_Parser</a></dt>
    <dd><abbr title="Extensible Markup Language">XML</abbr>をパースするクラス。PEARパッケージ。ライセンスはPHPライセンス。</dd>
    <dt><a href="http://pear.php.net/package/XML_HTMLSax3">XML_HTMLSax3</a></dt>
    <dd>不正な<abbr title="HyperText Markup Language">HTML</abbr>や<abbr title="Extensible Markup Language">XML</abbr>もパースできるクラス。PEARパッケージ。ライセンスはPHPライセンス。</dd>
  </dl>
</div>


	タグ: <a href="http://dxd8.com/archives/tag/pear/" title="PEAR" rel="tag">PEAR</a>, <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a>, <a href="http://dxd8.com/archives/tag/%e3%82%af%e3%83%a9%e3%82%b9/" title="クラス" rel="tag">クラス</a>, <a href="http://dxd8.com/archives/tag/%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0/" title="スクレイピング" rel="tag">スクレイピング</a>, <a href="http://dxd8.com/archives/tag/%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa/" title="ライブラリ" rel="tag">ライブラリ</a>, <a href="http://dxd8.com/archives/tag/%e9%96%a2%e6%95%b0/" title="関数" rel="tag">関数</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/5/" title="PHPでコールバック関数にオブジェクトのメソッドを指定する (2007年12月27日)">PHPでコールバック関数にオブジェクトのメソッドを指定する</a> (1)</li>
	<li><a href="http://dxd8.com/archives/142/" title="CodeIgniterで管理ページを作成する (2008年7月5日)">CodeIgniterで管理ページを作成する</a> (1)</li>
	<li><a href="http://dxd8.com/archives/123/" title="CodeIgniter徹底入門が発売&#038;出版キャンペーン実施中 (2008年6月10日)">CodeIgniter徹底入門が発売&#038;出版キャンペーン実施中</a> (2)</li>
	<li><a href="http://dxd8.com/archives/150/" title="DreamHostでPHPのエラーログを出力 (2008年8月5日)">DreamHostでPHPのエラーログを出力</a> (0)</li>
	<li><a href="http://dxd8.com/archives/110/" title="PHPで変数のクラス名からインスタンスを生成する (2008年4月13日)">PHPで変数のクラス名からインスタンスを生成する</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/85/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>PHPで関数・メソッドの存在を調べる関数</title>
		<link>http://dxd8.com/archives/84/</link>
		<comments>http://dxd8.com/archives/84/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 00:00:20 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[関数]]></category>

		<guid isPermaLink="false">http://dxd8.com/archives/84/</guid>
		<description><![CDATA[PHPで、ある関数が存在するかどうかを調べるためにはfunction_exists関数を使います。しかし、この関数ではメソッドの存在は調べることはできません。メソッドが存在するかどうかを調べるにはmethod_exist [...]]]></description>
			<content:encoded><![CDATA[<p>PHPで、ある関数が存在するかどうかを調べるためにはfunction_exists関数を使います。しかし、この関数ではメソッドの存在は調べることはできません。メソッドが存在するかどうかを調べるにはmethod_exists関数を使います。</p>

<span id="more-152"></span>

<p>文字列からその関数やメソッドが存在するか調べたいと思ったのですが、関数とメソッドを同じように調べたいという場合には、function_exists関数とmethod_exists関数を上手く使い分ける必要があります。PHPにありがちな、やりたいことは似ているけど関数は別々というやつですね :x</p>

<p>function_exits関数の使い方は、引数に文字列で関数名を渡すだけです。</p>

<pre><code class="php">if (function_exists('func')) {
&nbsp;   echo htmlspecialchars("func関数が利用可能です。\n", ENT_QUOTES, 'UTF-8');
} else {
&nbsp;   echo htmlspecialchars("func関数は利用できません。\n", ENT_QUOTES, 'UTF-8');
}</code></pre>

<p>method_exists関数の場合は、オブジェクトかクラス名とメソッド名を渡します。</p>

<pre><code class="php">$instance = new Class();

if (method_exists($instance, 'method')) {
&nbsp;   echo htmlspecialchars("methodメソッドが利用可能です。\n", ENT_QUOTES, 'UTF-8');
} else {
&nbsp;   echo htmlspecialchars("methodメソッドは利用できません。\n", ENT_QUOTES, 'UTF-8');
}</code></pre>

<pre><code class="php">if (method_exists('Class', 'method')) {
&nbsp;   echo htmlspecialchars("methodメソッドが利用可能です。\n", ENT_QUOTES, 'UTF-8');
} else {
&nbsp;   echo htmlspecialchars("methodメソッドは利用できません。\n", ENT_QUOTES, 'UTF-8');
}</code></pre>

<p>さらに似たような関数で、「<a href="http://dxd8.com/archives/6/">PHPの関数でコールバック関数を引数にする</a>」で出てきた、関数として呼び出しが可能かどうかを調べるためのis_callable関数があります。引数は、「<a href="http://dxd8.com/archives/5/">PHPでコールバック関数にオブジェクトのメソッドを指定する</a>」で出てきたcallback擬似型で渡します。スピードは少し遅いみたいです。</p>

<p>callback擬似型や、関数名とクラスメソッド名のどちらの文字列が渡されても、その関数・メソッドが存在するかどうかを返すような関数を書いてみました。もっと簡単にできそうな気もしますが、似たような関数が多すぎて調べるのが大変なのでこんな感じにしときました。</p>

<pre><code class="php">function func_exists($func)
&nbsp;   if (false === $separator = strpos($func, '::')) {
&nbsp;       return is_array($func) ? method_exists($func[0], $func[1])
&nbsp;                                     : function_exists($func);
&nbsp;   } else {
&nbsp;       $class = substr($func, 0, $separator - 1);
&nbsp;       $method = substr($func, $separator + 2));
&nbsp;       return method_exists(array($class, $method));
&nbsp;   }
}

$func = 'func';
if (func_exists($func)) {
&nbsp;   echo htmlspecialchars("関数またはメソッドが利用可能です。\n", ENT_QUOTES, 'UTF-8');
} else {
&nbsp;   echo htmlspecialchars("関数またはメソッドは利用できません。\n", ENT_QUOTES, 'UTF-8');
}

$func = array('Class', 'method');
if (func_exists($func)) {
&nbsp;   echo htmlspecialchars("関数またはメソッドが利用可能です。\n", ENT_QUOTES, 'UTF-8');
} else {
&nbsp;   echo htmlspecialchars("関数またはメソッドは利用できません。\n", ENT_QUOTES, 'UTF-8');
}

$func = 'Class::method';
if (func_exists($func)) {
&nbsp;   echo htmlspecialchars("関数またはメソッドが利用可能です。\n", ENT_QUOTES, 'UTF-8');
} else {
&nbsp;   echo htmlspecialchars("関数またはメソッドは利用できません。\n", ENT_QUOTES, 'UTF-8');
}</code></pre>

<p>PHPでは入れ子クラスはできるのでしょうか。できる場合には、スコープ定義演算子(<code class="php">::</code>)の処理は変える必要がありますね。</p>

<p><code class="php">'$instance->method'</code>のようなインスタンスメソッドを表す文字列も、変数名とメソッド名を上手く分けるようにすれば処理できそうです。ただ、callback擬似型は多次元配列にはできないようなので(本当にできないのなら気持ち悪すぎます。)、<code class="php">'$instance1->$instance2->method'</code>のようなものはarray_map関数を使うなりするように修正する必要があります。配列の場合とかも考えると面倒そうですね。</p>

<p>今回は、基本的には関数名とクラスメソッド名だけを処理できればよかったので、こんな感じの関数で解決できました。</p>

	タグ: <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a>, <a href="http://dxd8.com/archives/tag/%e9%96%a2%e6%95%b0/" title="関数" rel="tag">関数</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/24/" title="CakePHPでgenerateList()の結果からモデルデータ形式の配列に戻す (2008年1月11日)">CakePHPでgenerateList()の結果からモデルデータ形式の配列に戻す</a> (0)</li>
	<li><a href="http://dxd8.com/archives/85/" title="PHPでのスクレイピングに役立つライブラリ (2008年3月12日)">PHPでのスクレイピングに役立つライブラリ</a> (7)</li>
	<li><a href="http://dxd8.com/archives/4/" title="CakePHPでURIの形式を統一する (2007年12月26日)">CakePHPでURIの形式を統一する</a> (4)</li>
	<li><a href="http://dxd8.com/archives/6/" title="PHPの関数でコールバック関数を引数にする (2007年12月28日)">PHPの関数でコールバック関数を引数にする</a> (0)</li>
	<li><a href="http://dxd8.com/archives/5/" title="PHPでコールバック関数にオブジェクトのメソッドを指定する (2007年12月27日)">PHPでコールバック関数にオブジェクトのメソッドを指定する</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/84/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHPマニュアルの検索を簡単にしてくれるブックマークレット</title>
		<link>http://dxd8.com/archives/76/</link>
		<comments>http://dxd8.com/archives/76/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 00:00:14 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ブックマークレット]]></category>
		<category><![CDATA[マニュアル]]></category>
		<category><![CDATA[検索]]></category>

		<guid isPermaLink="false">http://dxd8.com/archives/76/</guid>
		<description><![CDATA[PHPのオンラインマニュアルをよく使う人におすすめのブックマークレットを紹介します。検索の手間をちょっとだけ軽減してくれるブックマークレットです。



PHPの関数がなかなか覚えられないのは自分だけでしょうか？ [...]]]></description>
			<content:encoded><![CDATA[<p>PHPのオンラインマニュアルをよく使う人におすすめのブックマークレットを紹介します。検索の手間をちょっとだけ軽減してくれるブックマークレットです。</p>

<span id="more-134"></span>

<p>PHPの関数がなかなか覚えられないのは自分だけでしょうか？PHPは仕様に統一感が乏しいので、ついつい不安になって確認してしまいます。そんなときに便利なのが「<a href="http://www.milkstand.net/fsgarage/archives/001181.html">PHPの関数をすぐに調べるbookmarklet</a>」です。</p>

<p>登録したブックマークレットを開くと、ページ上に次のような検索ウィンドウが出てきます。</p>

<ul class="figure">
  <li><a href="http://dxd8.com/wp-content/uploads/php_search_new.png"><img src="http://dxd8.com/wp-content/uploads/php_search_new.thumbnail.png" width="128" height="64" alt="PHP Searchブックマークレットのウィンドウ" /></a></li>
</ul>

<p>後は調べたいキーワードを入力してクリックするだけで、PHPマニュアルの検索結果を表示してくれます。</p>

<p>便利なのは、ページ上のテキストを選択しているときにはその選択範囲をキーワードにしてくれる点です。</p>

<ul class="figure">
  <li><a href="http://dxd8.com/wp-content/uploads/php_search_selected_1.png"><img src="http://dxd8.com/wp-content/uploads/php_search_selected_1.thumbnail.png" width="128" height="93" alt="画像: テキストを選択" /></a></li>
  <li><a href="http://dxd8.com/wp-content/uploads/php_search_selected_2.png"><img src="http://dxd8.com/wp-content/uploads/php_search_selected_2.thumbnail.png" width="128" height="93" alt="画像: PHP Searchブックマークレットのウィンドウ(テキスト選択時)" /></a></li>
</ul>

<p>シリーズ(?)で英日/日英翻訳のブックマークレットも公開されていて、こちらも便利です。Firefoxのアドオンでも似たようなものがありますが、アドオンを入れすぎているせいか(数えてみたら、59個 :x)、微妙にもっさりなのです。このブックマークレットは軽快に動作するので、ストレスなく検索できるのがいいですね。</p>

	タグ: <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a>, <a href="http://dxd8.com/archives/tag/%e3%83%96%e3%83%83%e3%82%af%e3%83%9e%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88/" title="ブックマークレット" rel="tag">ブックマークレット</a>, <a href="http://dxd8.com/archives/tag/%e3%83%9e%e3%83%8b%e3%83%a5%e3%82%a2%e3%83%ab/" title="マニュアル" rel="tag">マニュアル</a>, <a href="http://dxd8.com/archives/tag/%e6%a4%9c%e7%b4%a2/" title="検索" rel="tag">検索</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/24/" title="CakePHPでgenerateList()の結果からモデルデータ形式の配列に戻す (2008年1月11日)">CakePHPでgenerateList()の結果からモデルデータ形式の配列に戻す</a> (0)</li>
	<li><a href="http://dxd8.com/archives/209/" title="CakePHP 1.3のキャッシュやスラッグ(Inflector::slug)に要注意 (2010年5月9日)">CakePHP 1.3のキャッシュやスラッグ(Inflector::slug)に要注意</a> (2)</li>
	<li><a href="http://dxd8.com/archives/11/" title="CakePHPでアプリケーションの設定をデータベースに保存する (2007年12月31日)">CakePHPでアプリケーションの設定をデータベースに保存する</a> (0)</li>
	<li><a href="http://dxd8.com/archives/150/" title="DreamHostでPHPのエラーログを出力 (2008年8月5日)">DreamHostでPHPのエラーログを出力</a> (0)</li>
	<li><a href="http://dxd8.com/archives/22/" title="LLフレームワークBOOKSシリーズ Fast CakePHPが発売 (2008年1月9日)">LLフレームワークBOOKSシリーズ Fast CakePHPが発売</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/76/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPの関数でコールバック関数を引数にする</title>
		<link>http://dxd8.com/archives/6/</link>
		<comments>http://dxd8.com/archives/6/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 00:00:39 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dxd8.com/php/post_7.html</guid>
		<description><![CDATA[PHPにはコールバック関数を受け入れるためのcallbackという擬似的な型があります(PHP: 本ドキュメントにおける疑似的な型および変数 - Manual)。コールバック関数を引数にとる関数を定義するにはどうしたらよ [...]]]></description>
			<content:encoded><![CDATA[<p>PHPにはコールバック関数を受け入れるためのcallbackという擬似的な型があります(<a href="http://jp2.php.net/language.pseudo-types#language.types.callback">PHP: 本ドキュメントにおける疑似的な型および変数 - Manual</a>)。コールバック関数を引数にとる関数を定義するにはどうしたらよいかというと、通常の関数と同じように定義するだけです。</p>

<span id="more-7"></span>

<pre><code class="php">function func($callback) {
}</code></pre>

<p>PHPでは引数の型はチェックされないので、引数がcallback(擬似)型かどうかをチェックするためには<a href="http://jp2.php.net/manual/ja/function.is-callable.php">is_callable関数</a>を使います。</p>

<pre><code class="php">function func($callback) {
&nbsp;   if (is_callable($callback)) {
&nbsp;       return true;
&nbsp;   }

&nbsp;   return false;
}</code></pre>

	タグ: <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/182/" title="XAMPPの設定(バーチャルホストなど)を別フォルダに分ける方法 (2009年1月24日)">XAMPPの設定(バーチャルホストなど)を別フォルダに分ける方法</a> (0)</li>
	<li><a href="http://dxd8.com/archives/110/" title="PHPで変数のクラス名からインスタンスを生成する (2008年4月13日)">PHPで変数のクラス名からインスタンスを生成する</a> (0)</li>
	<li><a href="http://dxd8.com/archives/109/" title="PHP5のコンストラクタ関数は__construct() (2008年4月12日)">PHP5のコンストラクタ関数は__construct()</a> (1)</li>
	<li><a href="http://dxd8.com/archives/123/" title="CodeIgniter徹底入門が発売&#038;出版キャンペーン実施中 (2008年6月10日)">CodeIgniter徹底入門が発売&#038;出版キャンペーン実施中</a> (2)</li>
	<li><a href="http://dxd8.com/archives/7/" title="CakePHPで外部からのデータ改竄を防止する (2007年12月29日)">CakePHPで外部からのデータ改竄を防止する</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPでコールバック関数にオブジェクトのメソッドを指定する</title>
		<link>http://dxd8.com/archives/5/</link>
		<comments>http://dxd8.com/archives/5/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 00:00:13 +0000</pubDate>
		<dc:creator>Phize</dc:creator>
				<category><![CDATA[PHP全般]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dxd8.com/php/post_6.html</guid>
		<description><![CDATA[array_map()などのコールバック関数を引数にとる関数にメソッドを指定したい場合、PHPではどんな風に書けばよいかわからなかったので調べてみました。



ちなみに最初は次のようにしてみましたがダメでした。 [...]]]></description>
			<content:encoded><![CDATA[<p>array_map()などのコールバック関数を引数にとる関数にメソッドを指定したい場合、PHPではどんな風に書けばよいかわからなかったので調べてみました。</p>

<span id="more-6"></span>

<p>ちなみに最初は次のようにしてみましたがダメでした。</p>

<pre><code class="php">array_map("$this-&gt;func", $var);</code></pre>

<p>正しくは、PHPでコールバック関数にメソッドを指定したい場合、次のように配列を使って指定します。</p>

<pre><code class="php">array_map(array('<var>クラス名</var>', '<var>メソッド名</var>'), $var);</code></pre>

<p>また、既にクラスのインスタンスが入ったオブジェクト変数がある場合は次のように指定します。</p>

<pre><code class="php">$obj = new MyClass();
array_map(array($obj, '<var>メソッド名</var>'), $var);</code></pre>

<p>さらに、PHP4でオブジェクトを参照渡しにする場合は次のように指定します。PHP5の場合には、オブジェクトは参照渡しになるので上記の書き方と同じです。</p>

<pre><code class="php">$obj = new MyClass();
array_map(array(&#038;$obj, '<var>メソッド名</var>'), $var);</code></pre>

<p>変な書き方ですね。これはcallbackという擬似的な型だそうです(<a href="http://jp2.php.net/language.pseudo-types#language.types.callback">PHP: 本ドキュメントにおける疑似的な型および変数 - Manual</a>)。PHPは知れば知るほど混乱します。</p>

	タグ: <a href="http://dxd8.com/archives/tag/php/" title="PHP" rel="tag">PHP</a><br />

	<h2>関連する記事</h2>
	<ul class="st-related-posts">
	<li><a href="http://dxd8.com/archives/110/" title="PHPで変数のクラス名からインスタンスを生成する (2008年4月13日)">PHPで変数のクラス名からインスタンスを生成する</a> (0)</li>
	<li><a href="http://dxd8.com/archives/109/" title="PHP5のコンストラクタ関数は__construct() (2008年4月12日)">PHP5のコンストラクタ関数は__construct()</a> (1)</li>
	<li><a href="http://dxd8.com/archives/6/" title="PHPの関数でコールバック関数を引数にする (2007年12月28日)">PHPの関数でコールバック関数を引数にする</a> (0)</li>
	<li><a href="http://dxd8.com/archives/11/" title="CakePHPでアプリケーションの設定をデータベースに保存する (2007年12月31日)">CakePHPでアプリケーションの設定をデータベースに保存する</a> (0)</li>
	<li><a href="http://dxd8.com/archives/85/" title="PHPでのスクレイピングに役立つライブラリ (2008年3月12日)">PHPでのスクレイピングに役立つライブラリ</a> (7)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dxd8.com/archives/5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
