ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2013年3月10日日曜日

[CakePHP]テスト周りの勉強会@Co-Edo

Co-Edoさんにて3/9(土)に行われた「(CakePHPとか)PHPのテストについての勉強会」に参加してきました。

やはり、勉強会に参加すると一人で勉強していると気付けないことに色々気づけて有意義ですね。
なんでもCo-Edoさんを運営される方々にはCakePHPユーザが多いとのことなので、Co-edoさんに行くときは少し嬉しくなります。

勉強会はプレゼン形式でした。下記の「CakePHP2実践入門」(祝増刷!!)の著者陣を始め、Cakeに精通したそうそうたる方々のプレゼンは非常に勉強になりました。




以下がプログラムです。
・テストの基本 & CakePHP2でTDD/BDD @sizuhiko さん 40min
・「8時間耐久PHPUnitの教室」から「PHPUnitの基本」清水 紘己 さん ※ Thanks, @yando さん 40min
・CakePHP(+BDD Plugin)+Jenkins @kaz_29 さん 25min
・xDebugについて 小林 慧一 さん 25min

Twitterで#coedoで検索すると、3/9あたりのタイムラインにプレゼン資料が色々出てきます。

seleniumもPHPUnitもBDDもJenkinsも知らなかったので、勉強になりました。
xdebugは使ってはいたけど、サーバ上のソースのデバッグができたり、変数を書き換えて実行できたり等知りませんでした。さっそく試してみたいと思います。

PHPunitやseleniumの導入はもうちょっと余裕が出てきたらやりたいですね!
でも、PHPUnitってCakePHP2.0から対応なんだ。1.3だとだめなのかな。。。

2012年12月12日水曜日

[PHP]演算子の優先順位

以下のサイトで説明していただいているように、演算子には優先順位があります。

演算子の優先順位

今日以下のようなコードを書いていたのですが、

$votable_flg = !empty($auth) and $check <1 and $theme['Theme']['kind']==1;


$votable_flgには"!empty($auth)"の値(真偽値)しか代入されていませんでした。
"or"や"and"より"="が優先されて処理されるためのようです。
なので、"="の右辺を以下のように丸括弧でくくると、期待通りの値が代入されました。

$votable_flg = (!empty($auth) and $check <1 and $theme['Theme']['kind']==1);

2012年11月22日木曜日

[CakePHP]セッション上の配列の一番後ろに格納する方法

以下のページの「5.7.1.1 write」にあるよう、CakePHPのsessionコンポーネントの$this->Session->write()で多次元配列を格納できるが、
連想配列でなく通常の配列の一番後ろに格納する方法がわからなかった。

メソッド :: セッション :: 主要なコンポーネント :: マニュアル :: 1.3コレクション 

そこで、以下で紹介されているように

Can I use array_push on a SESSION array in php?
 
$_SESSION['names'] = array();
array_push($_SESSION['names'],$name);
もしくは
$_SESSION['names'][] = $name; 
というようにすれば、namesの下に配列として0から格納し、
最後の添え字に+1した添え字で格納してくれることになる。
なので、シンプルな後者を使うことにした。
ちなみに、0ではない数字(例えば1)からカウントアップしていきたい場合は
以下で紹介されているよう。最初の値を1に格納してしまえばいいそう。

配列について

また、私の場合は、配列の添え字(上の例で言えば'name')
を変数で指定したいと考えていた。
そのためには下記のサイトで説明されているよう変数をダブルクオテーション
で囲む必要があるとのこと。

PHP で、変数を連想配列(ハッシュ)のキーにしたい。

こんな感じ。
$items["$item->id"] = $item->name;
ただ、私の場合は以下のように変数に角括弧を含むものを使おうとしていたら
動かなかった。
$_SESSION["$this->data['TargetSite']"][] = $result;
なので、以下のように一度別の変数に移してから格納したら正常に動いた。
$TargetSite=$this->data['TargetSite'];
$_SESSION["$TargetSite"][] = $result;

【課題】
やはり、 CakePHP標準の$this->Session->write()を使用して
同じことができるようになりたいな。
そちらのほうが、CakePHPの機能のセッション領域をDBにしたりする
のに簡単に対応できそう。
まぁ、ひとまず上記のやり方でいいや。

2012年10月10日水曜日

[PHP]PHPでJavaScriptを書き出す際のクオテーションについて

PHPでjavascriptを吐き出す場合、シングルクオテーションで
囲っている例が多い。もしかしたらダブルでもよいのかもしれないが、
シングルで囲う場合を考える。

以下phpのスクリプトで2~6行目がJavaScriptである。

$js->get("#register")->event('click','
    var fm = document.getElementById("add");
    $("#tags span").each(function(i){
        $("#add").append("<input type=\"hidden\" name=\"data[Tag]["+i+"][content]\"/>" );
        fm.elements[\'data[Tag][\'+i+\'][content]\'].value=$(this).text();
     });
');

javascript全体がシングルでかこわれている。
この中でさらにクオテーションを使用したい場合、
以下のサイトから、

PHPで javascriptを書き出すときのクォーテーションの使い方

「PHPとしての最初のクォティションと最後のクォティションはそのままで、
内側の同種クォティションはエスケープが基本」

らしいです。

なので、私も

・ダブルはそのまま使う。
・シングルを使いたい場合はエスケープ。

ただし、

javascriptが吐き出す文字列にダブルクオテーションを
付与したい場合は、エスケープしないとだめなようだ。

2012年10月5日金曜日

[PHP]配列の要素数の取得方法

javascriptみたいに「配列名.length」じゃだめで、
「count($配列名)」とのこと。

下記で勉強。

[PHP] 配列変数の長さを取得する

2012年10月1日月曜日

[CakePHP]XAMPP+eclipse+CakePHPでxDebugを使用する。

このページを見ていけました。
「デバッグのお気に入りの編成を選択して今作ったデバッグの構成を追加」
っていう一文が非常に大事でした。

CakePHP1.3/ 開発環境構築(Windows編)


※それぞれのバージョン
   CakePHP:cakephp-cakephp-1.3.15-9-gacd25c3.zip
  eclipse:pleiades-e3.5-php-jre_20100226 
   PHP:Version 5.3.1

2012年9月21日金曜日

[PHP]boolean のfalseはechoしても何も表示されない。

PHPのTRUEと FALSEについて 値を返すというけれど、なぜ「1」かブランク(何もなし)なのでしょうか?


このサイトによると以下とのことです。
どおりでなんにも表示されないと思った。


-----以下抜粋---------------------------------------------------------------------------
echo false;
とやると、falseがstring型へ自動型変換という手順を踏んでechoの対象になりますが
PHPの場合は falseをstring型へ変換すると ""(空文字列)になります。
(別の言語では"false"という文字列に変換されるものが多いですね)
よって、出力されません。
----ここまで----------------------------------------------------------------------------

2012年5月2日水曜日

eclipseの文字コードの設定

utf-8に統一しようって教科書に書いてあったので、eclipseで設定変更
http://www.javadrive.jp/eclipse3/setup/index1.html

Windws上でPHP、eclipse、subversionの開発環境を作る。

まずこのページからSetup-Subversion-1.6.6.msiをダウンロード。
バージョンはよくわからないので適当。
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=11151&expandFolder=11151&folderID=11149

下記のページを参考にインストール。リポジトリ作成。
http://www.hyuki.com/techinfo/svninit.html

下記でeclipseの設定を。
http://jutememo.blogspot.jp/2008/04/eclipse-subversion-subclipse.html


表示されないファイルがあるのは下記で対応
http://pentan.info/program/tools/eclipse_htaccess.html

aptanaのsmartsyncを使えばeclipseからFTPでサーバに転送することもできる。楽だ。
http://toyao.net/xoops/modules/wordpress/archives/3866

上記の smartsyncはdefaultだとローカルのソースとサーバ上のソースを比較し
更新されているものだけ転送の対象にできるようなのでけど、diffのやり方が
defaultだとtimestampしか見ていないようなので、下記のサイトを参考に
CRC checkで比べるよう設定変更。
http://ascabe.bakufu.org/aptana/helpq-4.html

※上記のaptana smartsyncは差分検出がうまくいかなかったのでやめて
下記のEclipse FTP and WebDAV Supporを使うことにした。
http://www.playersvillage.com/blog/2009/07/pdtftp.php

これでローカルの開発環境完成したかな。

【2012/9/10追記】
eclipseにpleiades-e3.5-php-jre_20100226.zip等を使用した場合は、
subclipseと同等のSVN用のプラグインが既に入っている。