php」カテゴリーアーカイブ

phpの参照渡しについて

・phpのオブジェクトはデフォルトでは参照渡しとなる
http://php.net/manual/ja/language.oop5.references.php

・もうひとつ。関数の戻り値の参照渡しについて。

<?php
class HelloWorld {
    var $value = "default";
    function &getValue() {
        return $this->value;
    }
}

$helloWorld = new HelloWorld();
$v =& $helloWorld->getValue();
$v = "HelloWorld";
print $helloWorld->value;

これで「HelloWorld」と出力される。関数「&getValue」の「&」とメソッド実行の戻り値「=&$helloWorld->getValue();」の「&」のどちらが抜けても参照渡しにはならない。その場合は値渡しとなり「default」と出力される。
http://d.hatena.ne.jp/cloned/20060510

・foreachの参照渡しについて
http://php.net/manual/ja/control-structures.foreach.php

・まとめ
http://jun3001.com/?p=92

幅優先探索(breadth first search)について勉強になったサイト

・解説
http://itpro.nikkeibp.co.jp/article/COLUMN/20120827/418466/?ST=develop&P=3
http://d.hatena.ne.jp/keyword/%C9%FD%CD%A5%C0%E8%C3%B5%BA%F7

・PHPで書かれたサンプルコード
http://www.stoimen.com/blog/2012/09/10/computer-algorithms-graph-breadth-first-search/

・関連記事、深さ優先探索について
http://d.hatena.ne.jp/lettas0726/20110418/1303097692

・phpの関連関数
array_shiftはキュー
array_popはスタック
イメージとしてキューは底のない入れ物で、最初に入れた物が取り出される時はどの物よりも最初になる
スタックは底のある入れ物で、最初に入れた物が最後に取り出される

htmlspecialcharsとhtmlentities

htmlspecialcharsはデフォルトで4つの文字(<、>、&、”)をHTML の表現形式に変換します。対して、htmlentitiesはデフォルトで先の4つを含む100個の文字を変換します。より厳密にエスケープしたいなら、 htmlentitiesを使う必要があります。

404ページについて

クライアントが存在しない、又は存在するけれどアクセスして欲しくないファイルURLをリクエストした場合、.htaccessに以下のように記述

ErrorDocument 404 /error/404.php
ErrorDocument 403 /error/404.php

リクエストされたURLのパラメータが間違っていた時、エラーページを表示させるために、phpコードは

header(“HTTP/1.1 404 Not Found”);
include_once realpath(dirname(__FILE__)) .’/main/error/404.php’;
exit;

headerにLocation:を指定してリダイレクトせずにファイルをincludeしているのは、ヘッダが302コードで上書きされてしまうから
by http://colo-ri.jp/develop/2011/05/php-proper-404-redirect-way.html
http://phpspot.org/blog/archives/2009/04/403404php.html

phpのisset関数とempty関数について

クラスのプロパティーに初期値として0かnullか空文字を入れて定義しているが、この初期値が代入されて変更されているかを判別する時、isset関数を使わずにempty関数を使う

$a = ‘a’;
echo empty($a) ? ‘真’ : ‘偽’;
$a = ”;
echo empty($a) ? ‘真’ : ‘偽’;
$a = null;
echo empty($a) ? ‘真’ : ‘偽’;
$a = 0;
echo empty($a) ? ‘真’ : ‘偽’;

結果は

「偽真真真」

となる