タグ

2014年3月25日のブックマーク (3件)

  • オブジェクトのクローンの作製 - チキン煮込みチーズミックス4辛

    クローンを作るための__cloneってメソッドがあるらしいけど、あんまり調べずに、C#の感覚で使ってたら、全然違ってハマりましたよ、という話。ましたっていうか現在進行形だけど。 <?php $obj2 = clone $obj1; ?> ってやると__cloneなるメソッドが呼ばれるらしいけど、呼ばれる__cloneメソッドは、$obj1ではなく$obj2の__cloneらしい。僕はてっきり$obj1のメソッドが自分のクローンを作って戻り値で渡してるんだと思ってた。例えば、こんな感じ。 <?php class Foo { priate $bar; public __construct() { $this->bar = new Bar(); } // 間違った __clone の実装 public __clone() { $clone = new Foo(); $clone->bar = c

    オブジェクトのクローンの作製 - チキン煮込みチーズミックス4辛
    nogoro
    nogoro 2014/03/25
    (前項より)…の問題が発生。 当記事は何か誤ってるがコメントが端的で良い-「__clone呼出し時は既にシャローコピー完了し各フィールドに値(or参照の値渡し)あり。ディープコピーしたければ__cloneに勝手に処理書けって事」
  • 【 ほでなすPHP 】 PHP5の基本 -> 特殊メソッド/オートロード

    特殊メソッド/オートロード PHPには、「__construct()」(コンストラクタ)や「__destruct()」(デストラクタ)の他にも、その名前で定義されたメソッドは“呼ばれ時”になると勝手にコールされるという「特殊メソッド」があります。また「特殊関数」があります。 何れも「__(アンダーライン2)」で始まるメソッド名または関数名です。PHPでは「__(アンダーライン2)」で始まるメソッド名または関数名を、“特殊な関数”として予約していて、「__(アンダーライン2)」で始まる関数名を付けないよう推奨されているので、付けない様にしましょう。 これらの「特殊メソッド・関数」を定義する場合、“引数の数と返り値の型を決められた形態通りに定義”しなくてはなりません。そうしないと機能しないし、コールされる際に「E_ERROR」エラーを発するか、場合によってはサーバがダウンします。 特殊メ

    nogoro
    nogoro 2014/03/25
    PHPの__clone()の動作が分かるサンプルコード(その他特殊メソッドのサンプルコードあり)。多くの言語でオブジェクトは勝手に参照渡しになる為、オブジェクトをフィールドに持つオブジェクトはシャローコピー…次項へ続
  • $_SERVER['PHP_SELF']は危険? - [PHP + PHP] ぺんたん info

    PHPで自ページから自ページへ遷移する動作をさせるとき、AタグやFORMタグに$_SERVER['PHP_SELF']を使う方法があります。 Aタグに使う場合 <a href="<?php echo $_SERVER['PHP_SELF']; ?>"> FORMタグに使う場合 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> しかしこのような目的で$_SERVER['PHP_SELF']を使うときには気をつけたほうがいいです。 XSS(クロスサイトスクリプティング)というセキュリティーホールになります。 CakePHPやZend Frameworkなどmod_rewriteを使っているときです。 例えば次のようなURL http://example.com/hoge.php/"><script>alert('

    nogoro
    nogoro 2014/03/25
    PHP_SELFでなくSCRIPT_NAMEを使うべきか。←"path info"にJavaScriptなどのXSS(クロスサイトスクリプティング)のセキュリティーホールになりうるため。 http://b.hatena.ne.jp/nogoro/20121121http://b.hatena.ne.jp/nogoro/20121228 に関連項。