【PHP】isset()とempty()の挙動まとめ。

自分用。

以下の変数を用いて実験。
※$hは未定義とする

$a = null;
$b = 0;
$c = '0';
$d = array();
$e = '';
$f = true;
$g = false;
// $h

まずはisset()。

var_dump(isset($a));
var_dump(isset($b));
var_dump(isset($c));
var_dump(isset($d));
var_dump(isset($e));
var_dump(isset($f));
var_dump(isset($g));
var_dump(isset($h));
↓
bool(false)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)

isset()は「null」、「未定義」の場合のみ「false」。

次にempty()。

var_dump(empty($a));
var_dump(empty($b));
var_dump(empty($c));
var_dump(empty($d));
var_dump(empty($e));
var_dump(empty($f));
var_dump(empty($g));
var_dump(empty($h));		
↓
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
bool(true)

empty()は「true」の場合のみ「false」を返却という結果に。

ということで結果を表にまとめてみた。

isset() empty()
null bool(false) bool(true)
0 bool(true) bool(true)
‘0’ bool(true) bool(true)
array() bool(true) bool(true)
bool(true) bool(true)
true bool(true) bool(false)
false bool(true) bool(true)
未定義 bool(false) bool(true)

変数未定義のempty()もエラー吐かずにtrue返してくれるのね。ためになっt(ry

 

【jQuery】data属性に特定の値を持つ要素を指定する方法。

めも。

単に要素内に特定の値を持つノードを選択したいのであれば、下記のように「:contains()」を用いれば拾える。

■HTML

<div data-hoge="fuga">piyo</div>

■jQuery

$(function(){
	var elem = $('div:contains("piyo")');
	console.log(elem.data('hoge'));
})
[console]
fuga

これをどうにかごにょごにょして、data属性に特定の値を持つノードを選択できないかと色々調べてみたけれど、結局以下のようにするしかなさそう(?)な感じがした。

■HTML

<div data-hoge="fuga">piyo</div>

■jQuery

$(function(){
	var elem = $('[data-hoge="fuga"]');
	console.log(elem.text());
})
[console]
piyo

とりあえず動作は問題ないけど、もっとスマートな記述方法はないだろうか。属性セレクタはパフォーマンスがクッソ重いからなるべくなら使いたくないところ。
見つけたらもっかいまとめよう。

【CakePHP】EclipseにてModelクラスとViewクラスのメソッドを補完させる方法。

コントローラー内でModelクラス内のメソッドを補完させる方法と、ビューファイル(.ctp)内でViewクラスのメソッドを補完させる方法。

まずコントローラーにて。

/**
 * @property Item $Item
 */
class ExamplesController extends AppController {

}

コントローラークラスの上部にコメントアウトで@propertyを記述してやることで、Eclipaseがモデル内のメソッドを自動で補完してくれるようになる。複数のモデルを一括で指定したい場合はコメントアウト内に@propertyを列挙してあげればよい。
※コメントアウトをクラス内に記述してしまうと全く動作しないので注意。

/**
 * @property Item $Item
 * @property Hoge $Hoge
 * @property Fuga $Fuga
 * @property Piyo $Piyo
 */
class ExamplesController extends AppController {

}

次にビュー。

<?php /* @var $this View*/ ?>

「.ctp」内の先頭行に上記1行を記述してやればよい。
※予め「.ctp」をPHPファイルとしてEclipseに認識させておかないと補完されないので注意。

たったこれだけでCakePHPでの開発が数倍快適になること間違いなし。

 

【Webサービス】ブラウザ上で超強力な画像編集を行う方法。

とんでもないWebサービスを見つけてしまったのでメモ。

Photo editor online / free image editing direct in your browser – Pixlr.com

595821affbfe2de72fd121dd0f968530

画像にモザイクをかけられるツールはないかと探していたときに発見。

説明はほぼ不要。上記URLにアクセスすれば某超高級画像編集ソフトライクな画面が出てくる。あとは思うがままに操作するだけ。

これは近年稀にみる神サービス。

 

【MySQL】カラムの名前に別名をつけて取得する。

メモ。

SELECT
	col_1 AS hoge,
	col_2 AS fuga
FROM
	tbl_1

としてやると、本来「col_1」という名前だったカラム名が「hoge」として、「col_2」という名前のカラムは「fuga」として取得することが出来る。

以下PHPMYADMIN上で実行した際の参考画像。

0940fc81d9f939d7f864be36e7f9a09c

 

【MySQL】 JOIN (表結合)の違いまとめ。

いつもの如く超絶自分用。

結合方式 詳細
LEFT JOIN(LEFT OUTER JOIN)

・JOIN左側のテーブルデータは全て表示。(WHERE句があればそれに順ずる)

・そこへ対応する右側のテーブルデータが追される。

・対応するデータが右側のテーブルに存在しない場合、 NULLが挿入される。

RIGHT JOIN(RIGHT OUTER JOIN)

・基本的にLEFT JOINの逆動作

・JOIN右側のテーブルデータは全て表示。(WHERE句があればそれに順ずる)

・そこへ対応する左側のテーブルデータが追される。

・対応するデータが左側のテーブルに存在しない場合、 NULLが挿入される。

INNER JOIN

・指定したテーブルの双方に結びつくレコードが存在している場合のみ表示される。

・いずれかがNULLの場合どちらも表示されない。

SQLとしては以下のような感じ。

SELECT
	*
FROM 
	sites LEFT JOIN items
ON
	sites.id = items.site_id

上記は、サイトに対して結びつくアイテムをリレーションで管理しているような場面を想定した際の一例。
「LEFT JOIN」の部分を「RIGHT JOIN」「INNER JOIN」にすれば、上の表通りな挙動になる。

 

【PHP】ついにリリース。CakePHP2.4(安定版)。

でましたね。っていっても8月30日ですけど!
主なフィックスは、バージョン3.0に向けて機能の整理、及び安定性と性能を強化、とのこと。
今日のPHPカンファレンス参加して思ったけど、やっぱりCake人工多いね。圧倒的だね。熱いね。ほんと下気圧。もう変換ミスも気にならないくらい激熱。

PHPフレームワークも乱立する時代になって、ざっと数えただけでも8個くらいあるけども、やっぱりCakeのとっつきやすさはダントツな気がする。日本語ドキュメントも充実してて、転がってるエントリも多い。やっぱりCakeが大好きです。

そして会場にて勢いで買ったやーつー。

写真

最近Cakeに触れてなさ過ぎて禁断症状出そう。いい加減社内オレオレフレームワークじゃなくてOSS使わせてくださいお願いします。切実に。

【PHP】echo()、print()どっちが速いか。

結論から。

 

echo()のほうが速い。

 

そもそも。print()は内部でecho()を呼んでおり、返り値として必ず1を返却している。
そして最後にはFREE(メモリの開放?)処理を行うためecho()よりも若干パフォーマンスが下がるのである。

実際の動作はオペコードを見れば簡単に違いを確認できるが詳細は各自参照されたし。

オペコードに関しては下記URLを参照されたし。
http://www.php.net/manual/ja/internals2.opcodes.php