PHP5.3.0の仕様?
<?php Class Hoge { const A = 1; const B = 1; public static $piyo = array( 1 => 1, 1 => 2, ); public static $fuga = array( self::A => 1, self::B => 2, ); } var_dump(Hoge::$piyo, Hoge::$fuga); ?>
結果
array(1) { [1]=> int(2) } array(1) { [1]=> int(1) }
snippetsEmuを導入する。
MacのTextMate'sというエディタのすにぺっとをエミュレートするナイスなプラグイン。
$ cd ~/src $ wget http://www.vim.org/scripts/download_script.php?src_id=8450 $ mkdir -p ~/.vim/after/ftplugin $ vim snippy_plugin.vba
コマンドモードで
:so % :q
昔は一緒にインストールされたんだけど、php用のすにぺっとファイルを以下に保存。
~/.vim/after/ftplungin/php_snippets.vim
内容はこんな感じ。
もともとのファイルをPEARコーディング規約にあわせて修正したり追加したりした記憶。
if !exists('loaded_snippet') || &cp finish endif let st = g:snip_start_tag let et = g:snip_end_tag let cd = g:snip_elem_delim exec "Snippet php <?php<CR>".st.et."<CR>?>" exec "Snippet if if (".st."condition".et.") {<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet ifelse if (".st."condition".et.")<CR>{<CR>".st.et."<CR>}<CR>else<CR>{<CR>".st.et."<CR>}<CR>".st.et exec "Snippet else else {<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet elseif elseif (".st."condition".et.") {<CR><Tab>".st.et."<CR>}<CR>" exec "Snippet if? $".st."val".et." = (".st.et.")? ".st.et.": ".st.et.";<CR>".st.et exec "Snippet for for ($".st."i".et." = ".st.et."; $".st."i".et." < ".st.et."; $".st."i".et."++) {<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet foreach foreach ($".st."variable".et." as $".st."key".et." => $".st."value".et.") {<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet while while (".st.et.") {<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet do do {<CR><Tab>".st.et."<CR>} while (".st.et.");<CR>".st.et exec "Snippet switch switch (".st."variable".et.") {<CR>case ".st.et.":<CR><Tab>".st.et."<CR><Tab>break;<CR>".st.et."<CR>default:<CR><Tab>".st.et."<CR><Tab>break;<CR>}<CR>".st.et exec "Snippet case case ".st.et.":<CR><Tab>".st.et."<CR><Tab>break;<CR>".st.et exec "Snippet incll include_once '".st."file".et."';<CR>".st.et exec "Snippet incl include '".st."file".et."';<CR>".st.et exec "Snippet req require '".st."file".et."';<CR>".st.et exec "Snippet reql require_once '".st."file".et."';<CR>".st.et exec "Snippet function function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet define define('".st."CONSTANT".et."', ".st.et.");<CR>".st.et exec "Snippet array $".st."arrayName".et." = array(".st.et.", ".st.et.");".st.et exec "Snippet print print \"".st."string".et."\"".st.et.";".st.et."<CR>".st.et exec "Snippet $_R $_REQUEST['".st."variable".et."']".st.et exec "Snippet $_S $_SERVER['".st."variable".et."']".st.et exec "Snippet $_G $_GET['".st."variable".et."']".st.et exec "Snippet $_P $_POST['".st."variable".et."']".st.et exec "Snippet $_C $_COOKIE['".st."variable".et."']".st.et exec "Snippet -globals $GLOBALS['".st."variable".et."']".st.et.st."something".et.st.et.";<CR>".st.et exec "Snippet class class ".st."ClassName".et."<CR>{<CR><TAB>function __construct(".st.et.")<CR><TAB>{<CR><Tab><Tab>".st.et."<CR><Tab>}<CR><Tab>".st.et."<CR>}<CR>" exec "Snippet public public function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet protected protected function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet private private function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et exec "Snippet const const ".st."CONSTANT".et." = ".st.et.";<CR>".st.et
vimのインストール
$ mkdir -p $HOME/src $ cd $HOME/src $ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2 $ wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz $ tar pxvf vim-7.2.tar.bz2 $ tar zxvf vim-7.2-lang.tar.gz $ cd vim72 $ ./configure --prefix=$HOME --enable-multibyte --with-features=big --without-x --disable-gui $ make $ make install
with-featuresオプションは現状ではbigとfuge違いないらしい
http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/various.html#+feature-list
またdisられてますよ
*-users.jpの比較 by ならべて(http://narabete.com)
2008/05ハブサイトブームで誕生 | デザイン | 使い勝手 | 情報量 | 期待 | |
AIR-users.jp | ○ | - | - | - | ○ |
js-users.jp | ○ | - | - | - | - |
mac-users.jp | ○ | - | - | ○ | - |
nakano-users.jp | ○ | - | - | - | - |
opera-users.jp | ○ | - | - | - | - |
perl-users.jp | ○ | - | - | - | ○ |
php-users.jp | ○ | × | - | - | × |
pyobjc-users.jp | ○ | - | - | - | - |
python-users.jp | ○ | - | - | - | - |
rails-users.jp | ○ | - | - | - | ○ |
is_intとis_mumericの間の関数が欲しい
is_intはint型チェック、is_mumericは数値っぽいものをチェック。
string型でもintっぽいかどうかチェックしたい。
<?php function range_int($val) { return (is_numeric($val) && (string)$val === (string)(int)$val); } $arr = array( "123", "0", "-1", 0123, 2147483647, 2147483648, 0, 11, 9011, 00, 0x12, true, " ", "", 1.1, "123.1", "00", "0x123", "123a", "ada", "--1", "999999999999999999999999999999999", false, null, '1 ' ); foreach ($arr as $val) { print range_int($val)? 'T': 'F'; print ' '; if ($val === null) { print 'null'; } elseif ($val === true) { print 'true'; } elseif ($val === false) { print 'false'; } elseif (is_string($val)) { print '"' . $val . '"'; } else { print $val; } print "\n"; }
T "123" T "0" T "-1" T 83 T 2147483647 F 2147483648 T 0 T 11 T 9011 T 0 T 18 F true F " " F "" F 1.1 F "123.1" F "00" F "0x123" F "123a" F "ada" F "--1" F "999999999999999999999999999999999" F false F null F "1 " F ".1"
is_numeric
T "123" T "0" T "-1" T 83 T 2147483647 T 2147483648 T 0 T 11 T 9011 T 0 T 18 F true F " " F "" T 1.1 T "123.1" T "00" T "0x123" F "123a" F "ada" F "--1" T "999999999999999999999999999999999" F false F null F "1 " T ".1"
is_int
F "123" F "0" F "-1" T 83 T 2147483647 F 2147483648 T 0 T 11 T 9011 T 0 T 18 F true F " " F "" F 1.1 F "123.1" F "00" F "0x123" F "123a" F "ada" F "--1" F "999999999999999999999999999999999" F false F null F "1 " F ".1"
SJIS-win→SJIS
<?php $str = "あアア①㈱㌦〜" . pack('C*', 0xF8, 0x9F); echo mb_convert_encoding($str, 'SJIS-win', 'SJIS-win') . "\n"; echo mb_convert_encoding($str, 'SJIS', 'SJIS') . "\n"; echo mb_convert_encoding($str, 'SJIS', 'SJIS-win') . "\n"; echo mb_convert_encoding($str, 'SJIS-win', 'SJIS') . "\n";
あアア①㈱㌦〜[絵文字] あアア①㈱㌦〜? あアア???〜? あアア①㈱㌦〜?
あれ?
PEAR::Pager
Pagerにはマニュアルに載ってないオプションが結構ある。
PEAR :: Manual :: Pager::factory
- fixFileName
- httpMethod
- formID
- importQuery
- altFirst
- altLast
- prevImgEmpty
- nextImgEmpty
- accesskey
- attributes
- onclick
- curPageSpanPre
- curPageSpanPost
- firstLinkTitle
- nextLinkTitle
- prevLinkTitle
- lastLinkTitle
- showAllText
- extraVars
- excludeVars
- currentPage
accesskeyとかおっと思うのですが、ページナンバーがそのままアクセスキーになる糞仕様。
10とかアクセスキーに設定しても意味ないじゃん。
nextAccesskey、firstAccesskeyとかいうオプション作ればいいのに。