PHP

【PHP】文字列先頭のゼロを全て取り除く方法。

ゼロパディングの逆バージョン。

$str = '000023';
$result = ltrim($str, '0');
var_dump($result);

上記の場合「23」という結果を得られる。

 

【PHP】定義済みのクラスを全て取得する。

めも。

var_dump(get_declared_classes());
die();

 

【PHP】定義済みの定数を全て取得する。

めも。

var_dump(get_defined_constants());
die();

get_difined_constants()を実行することで、実行時点までに定義された定数の一覧を取得することが出来る。

これはまじで便利。

 

【PHP】Smartyテンプレート内でPHPタグを動作させる方法。

メモ。

テンプレート内で下記のように記述すればOK。

{php}
    // PHPコードを記述
{/php}

上記の通り普段通りのPHPコードを「{PHP}…{/PHP}」で囲めばOK。

 

【CakePHP2.4】独自コントローラーを継承した際、ComponentとHelperのマージを制御する。

CakePHPはAppControllerで読み込んだComponent、Helperがそれを継承した子コントローラーのそのものと自動的にマージされる。

しかし継承時、親と子の間に独自で定義したコントローラーを挟んだ場合、独自コントローラー内でのComponent、Helperはマージ対象から外れてしまう。

なので、ユーザーの意図した挙動に修正するために独自コントローラー内で下記変数に少々細工を加える。

App::uses('AppBaseController', 'Controller');

class AppBaseController extends AppController {
	public $components = ['hogeComp'];

	// マージ対象の親クラスを変更する
	protected $_mergeParent = 'AppBaseController';
}

上記の通り、「$_mergeParent」にセットする値を変更することでマージの挙動を変更することが可能。

 

【CakePHP2.4】独自で定義したコントローラーを継承する。

AppControllerではなく独自で作成したコントローラーを継承(extends)したい場合、下記の通り継承先のファイルにて用意したコントローラーを読み込んでやる必要がある。

App::uses('ControllerClassName', 'Controller');

例。

App::uses('AdminBasesController', 'Controller');

class AdminsController extends AdminBasesController {

}

こんな感じ。

 

【CakePHP2.x】特殊なmetaタグをhtmlヘルパーで出力する方法。

apple-touch-iconなどの特殊なmetaタグを出力したい場合などの記述方法。

echo $this->Html->meta('apple-touch-icon-precomposed', '/img/apple-touch-icon-144x144.png', [
	'type'=>'icon',
	'size' => '144x144',
	'rel'=>'apple-touch-icon-precomposed'
])."\n";
echo $this->Html->meta('apple-touch-icon-precomposed', '/img/apple-touch-icon-114x114.png', [
	'type'=>'icon',
	'size' => '114x114',
	'rel'=>'apple-touch-icon-precomposed'
])."\n";

こんな感じ。
※第1引数は既知のmetaタグ出ない場合、どこにも出力されない。

 

【PHP】配列の先頭にキーと値を指定して要素を追加する。

array_unshift()だとキーを指定できないので下記のように少々工夫を行う。

$ar = [
	'key1' => 'val1',
	'key2' => 'val2',
	'key3' => 'val3',
	'key4' => 'val4',
];

// いったん配列をひっくり返す
$tmp = array_reverse($ar, true);
// 配列の最後に要素を追加
$tmp['key0'] = 'val0';
// そしてもっかいひっくり返す
$ar = array_reverse($tmp, true);

トリッキーだけどなかなかよさ気。