閉じタグってのは「?>」のことね。未だに閉じタグ使ってるコードを見ると一瞬ドキッとするんだよね。(自分の昔のコードも含むw) いや、ちゃんとわかってて確実に使いこなしてるならいいんだけどたまに -- ここがファイルの先頭 -- <?php class Foo { // いろいろ } ?> -- ここがファイルの後尾 -- みたいな感じで閉じタグの後に改行コードが一つ入ってたりするのを見ると「あわわわ」ってなっちゃう。 実際には改行一つだけなら問題は出ない、PHPは閉じタグの直後の改行を消してくれるからね。 問題は改行が二つ以上あった場合だ。これは悲惨なことになる。PHPは閉じタグ以降のデータ(というか範囲外のデータ)は全部HTMLとして出力される仕様なので、改行コードが表示されちゃう事態に。 表示されちゃうっていうのは語弊があるか、元々PHPはHTMLに埋め込むための言語なのでの範囲外の文
PHPでは他の言語のようにコンストラクタからメソッドチェーンできない。例えば"new Hoge->doSomething();"というようなことができない(やってみるとパーサエラーになる)。 オブジェクトを生成して何かひとつメソッドを呼び出して終わり、という例の時に <?php $obj = new Hoge; $obj->doSomething(); とやるのは変数に何か名前をつけるコストやタイプ数などの観点から見てめんどうくさい。 そこで以下のような関数を定義する。 <?php function ref($obj) { return $obj; } この関数はみたとおり渡された値をそのまま返す関数だが、これを使うことで以下のようにメソッドチェーンできるようになる。 <?php ref(new Hoge)->doSomething(); というバッドノウハウっぽい話。
ちょっとしたネタ。PHP_CodeSnifferのコードを見ていて気づいたんですが。。。 コーディング規約の指定 PHP_CodeSniffer は、複数のプロジェクトで使用するために、 複数のコーディング規約をインストールすることができます。 PHP コードをチェックする際に、どのコーディング規約を使用するかを PHP_CodeSniffer に指定することができます。これを行うのが、コマンドライン引数 --standard です。 standardオプションには規約名だけじゃなく、規約を定義したディレクトリへのフルパスが使えるようです。 たとえば、PEAR :: Manual :: コーディング規約のチュートリアルにある規約MyStandardをカレントディレクトリ以下に作った場合、以下のようにフルパスを指定すればOKです。 $ ls MyStandard Test.php $ php
タイトルは釣りです。 実際のタイトルは「Perlのオブジェクト指向がムズカシイだって?んなバカな。だったらPHPで再現してやんよ!」でございます。 ヘイヘイヘイ。そこの君。Perlのオブジェクト指向が難しいだなんていったい誰が言ったんだい? Perlのオブジェクト指向ほど、シンプル且つ柔軟なものはないよ! 単なるパッケージ(名前空間)とリファレンス(データ)をblessという関数で紐付けただけのもなんだから。 第一引数に必ず$selfが来るっていうのも結局の話たんなる関数呼び出しとなんら変わらないのだから。 package Foo; sub new { my $class = shift; return bless { @_ } , ref $class || $class; } sub plus { my $self = shift; my $int = shift; return $s
PHPはソースコードを読めばわかるとおりC言語で書いてあります。 そのC言語の中でPHPがどんな処理をしているのかをデバッガであるgdbを用いて見ることができるのでそれを紹介します。まぁ普通のgdbの使い方なんですが:p ソースをダウンロードしてコンパイル PHP-5.2.6のソースをダウンロードします。 まず./configureするとのMakefileができます。 このMakefileの中で-gオプションがついていることを確認しましょう。*1 これがデバッガ(gdb)用のオプションで、コンパイルされたバイナリファイルにソースコードとの対応付けができます。 次にmakeします。時間がかかります。 サンプルファイル makeしている間に次のようなPHPファイルを作成しましょう。 <?php $i = "12"; $k = intval($i); ?> これは文字列の"12"をintval関
みたいなタイトルの記事を Digg 経由で発見。チートシート代わりにと思い超訳。*1 A Software Architect PHP 最適化 ベストプラクティス! 01. static にできるメソッドは static として宣言しよう。(4倍速い) 02. echo の方が print より速い。 03. echo '文','字'; (カンマ区切り)の方が、'文'.'字' (ドット連結)より速い。 04. ループの最大値は、ループ「内」ではなく「前」にセットしておこう。 05. 大きい配列のような変数は unset() してメモリを解放しよう。 06. マジックメソッド(例: __get, __set, __autoload)は使用を避けよう。 07. require_once はハイコストなのです。 08. include や require でファイルはフルパスで指定しよう。 09
高木さんキター!ホントにありがたいことです。最近全然お手伝いできなくてすみません。。。 PHP 5.3.0以降で導入予定の名前空間についての解説が、公式マニュアルに追加されました。 名前空間の他、遅延静的束縛 (Late Static Bindings)についても記載がありますね。たとえば <?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); というコードがあったときに「A」が表示されるのか?「B」が表示されるのか?ということですが、 PHP5.3以前:A
2008年01月29日16:00 カテゴリLightweight Languages 「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い Matzさんの意見に、想定内の反応が返って来ている。 Matzにっき(2008-01-26) - [言語] Attacking PHP PHPがいかに駄目な言語か、という話。 どの言語で書いてもおかしなコードを書く奴は書く。perlでもjavaでもrubyでも、どの言語で書いてもSQLインジェクションやらXSS脆弱性やらを作りこむ奴は作りこむ。ただそれだけの話というか、別な話だろう。 両方とも事実だし、foo言語のuserがbar言語がいかに駄目かを語るというのは有史以前(コンピューター言語以前に自然言語でもある)からの話題なのだが、しかし"PHP sucks"には他とかなり異なる点が一つあるように見受けられる。 それは、PHP
preg_replace( string|array $pattern, string|array $replacement, string|array $subject, int $limit = -1, int &$count = null ): string|array|null パラメータ pattern 検索を行うパターン。文字列もしくは配列とすることができます。 PCRE 修飾子 も使えます。 replacement 置換を行う文字列もしくは文字列の配列。 この引数が文字列で、pattern 引数が配列の場合、 すべてのパターンがこの文字列に置換されます。 pattern および replacement のいずれもが配列の場合、各 pattern は 対応する replacement に置換されます。 もし、replacement 配列の要素の数が pattern 配列よりも少
PerlよりPHPの方が軽くて速いは本当? 川合孝典(2002/3/12) 元々メーリングリストにも流してWikiで公開していたものなんですが、Wikiのサイトが停止したこともあり、こちらに移植して編集しました。バージョンが多少古い目のものが多くなっていますが、このベンチを行ったときには、それほど古くないバージョンだったはずなんですけどねぇ。 結論から先にいましょう。私としてはPHPは立ち上がりは速いけどPerlだって負けてないし、処理そのものはPerlのほうが速いよんということだと思っています。ついでに憎まれ口を叩くと「PHPが比較している相手はPerl4なのでは?」と思っています。「CGIとPerlはきちんと区別してね」とか。「JavaはPerlよりも比較にならないほど速い?」の計算問題のあたりも合わせてご覧ください。あわせてPerl/DBIの次のステップをご覧いただくと参考になるかも
特殊文字を HTML エンティティに変換してくれるhtmlspecialchars関数。 PHPでは基本中の基本である関数でありながら、名前の長さやオプションの設定などが面倒で困ったものです。「htmlspecialchars」は覚えられても、オプションの「ENT_QUOTES」まで覚えるのはなかなか大変だったりします。でも、ここで手を抜くと簡単に脆弱なアプリケーションができあがってしまう危険性があります。特にユーザーからの入力には、手軽にがっちり入力保険をかけておくべきです。 そんなわけで、htmlspecialcharsを簡単に扱えるようにする方法を考えてみました。 お知らせ:PHP5.4にて、htmlspecialchars()関数に互換性の問題が出てきましたので、当ページでも第三引数に文字コードを指定するコードに変更しました。以下、第三引数の"UTF-8"の部分は、利用中の文字コー
こんな感じ。 !ereg('(^\.$)|(^\.\.$)', $file) とある行は、カレントディレクトリ(.)と、親ディレクトリを除いて処理するためのもの。 $filename[] の配列中に、ファイル一覧が入る。 <?php $dir_path = 'your_directory'; $filename = array(); $dir = dir($dir_path); while($file = $dir->read()) { if(!ereg('(^\.$)|(^\.\.$)', $file)) { $filename[] = $file; } } $dir->close(); ?>
再帰関数は、関数の中でその関数自身を呼び出す、ということを行っている関数です。将棋やチェスのようなゲームや、パズルを解くようなプログラムではよく使われ、プログラムをとてもシンプルに、見通しよく記述することができます。今回は、そんな再帰関数をPHPで使った例をご紹介します。 PHPでゲームを作る、というようなことはまずないと思うので、使いどころはか なり限られてしまうのですが、それでも便利に使える場面がないわけではありま せん。 ここではディレクトリ内のファイルをチェックし、そのディレクトリ内に含まれ るファイルサイズの合計を求めるプログラムを作ってみます。 ディレクトリに含まれるのが全てファイルなら、再帰関数でなくても大丈夫です が、ディレクトリ内が階層になっている場合は再帰関数が威力を発揮します。 <?php //PHP4の場合、scandir関数がないので実装しておきます。 if (!
PEAR 標準コーディング規約は、 PEAR の公式ディストリビューションに含まれるコードに適用されます。 コーディング規約 (Coding standards) は、開発者たちの間ではよく CS と略されます。この規約の狙いは、コードの一貫性を保つことと PEAR の開発者たちがコードを保守しやすくすることにあります。
2007/7/14にPHP4のメンテナンス終了日がアナウンスされ、通常のメンテナンスが2007/12/31まで、セキュリティフィックスが2008/8/8までと発表されました。本連載では、これを踏まえてPHP4.4からPHP5.2への移行について解説します。PHP5には便利な新しい機能が多く追加されていますがここではそれらには触れず、移行についてのみ解説します。PHP4からPHP5に移行する場合に必要のない項目はほとんど解説しません。PHP5の新しい機能についての解説は「はじめてのPHP言語プログラミング入門」(技術評論社)などのPHP5の入門書を参照してください。 特に記述がない場合、PHP4はPHP4.4.x、PHP5はPHP5.2.xを意味します。 PHP4とPHP5の違い PHP4とPHP5は言語仕様が異なる言語ですが、PHP5はPHP4の上位互換言語です。PHP4とPHP5両方で
「初めて学ぶWebプログラミング言語は何が良い?」に続いて、実際に買って読んだPHPの参考書のレビューを載せておきます。 読んでいない本のレビューをすることはできないので、実際に買って読んだ以下6冊のPHPの参考書のレビューにプラスして、PDFでダウンロードできる本、Webマニュアルのレビューを書きました。 PHPについて全く知らない状態から、参考書を買って独学で学んでいった時系列順に沿って書きました。 個人的な意見も含まれていますが、一人のレビュアーが複数のPHPの参考書レビューを載せているページはあまりないと思いますので、少しでも参考にしてもらえれば幸いです。 A.まずはじめに。プログラミング参考書購入について B-1.基礎PHP B-2.PHP5であなたもウェブアプリが作れる! B-3.PHP5本格派―PHP5で始めるWebアプリケーション構築ガイド B-4.PEAR入門 B-5.P
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く