2009/4/14 火曜日

C# オブジェクトの型判定(すぐ忘れるtypeof)

Filed under: .NET, C# — admin @ 4:27:18

あるオブジェクト(obj)の型がCLASSかどうか判定するIF文

if ( obj.GetType() == typeof( CLASS ) ) { }

typeof演算子の使い方をすぐに忘れるのでメモ。

2009/3/29 日曜日

phpの「is_null(var)」は厳密な型判定

Filed under: php — admin @ 6:27:12

たまによくわからなくなるのでメモ

$string = “”;
if (is_null($string)){
print “string is null”;
}
上記のif文はfalseになる

$string = “”;
if ($string == null){
print “string is null”;

上記のif文はtrueになる

普段は $string == null を使って判定した方がいいかも。
.NETみたいにString.IsNullOrEmpty()があるといいんだけど。

2009/1/23 金曜日

call_user_func

Filed under: php — admin @ 16:57:01

PHPでC#のデリゲートみたいなマネをcall_user_func()を使って、よくやります。
継承クラスは別ファイルできっちり作成しないと気持ち悪い
というJava出身者らしい剛健なスタンスで生きてきましたが、
PHPのヌルさの前ではもはや無力です。
call_user_funcにインスタンスメソッドを指定する場合、
配列にして$thisを渡す。これがまたよく忘れるのでメモメモ。

call_user_func — 最初の引数で指定したユーザ関数をコールする

#インスタンスメソッドの場合
call_user_func(array(&$this, $function));

#クラスメソッドの場合
call_user_func(array(’className’, $function));
call_user_func(’MyClass::myCallbackMethod’);// 5.2.3 以降

#引数を参照渡しする場合(PHPManualより)
function increment(&$var){
$var++;
}
call_user_func_array(’increment’, array(&$a));
注意: call_user_func() のパラメータは参照渡しではないことに注意しましょう。

■call_user_funcよりこっちの方が速いらしい
function myfunction(){…}←こんな関数があったとして
$function = ‘myfunction’;←関数名を文字列で変数にしておく
$function();←これで呼び出せるのかよ!っていいたくなるよなぁ。

?>

キャッシュを表示させない設定(PHP)

Filed under: php — admin @ 0:43:48

キャッシュを表示させたくない時、
画面表示前に下記Headerを出力する

header(”Cache-Control: no-cache, must-revalidate”);
header(”Cache-Control: post-check=0, pre-check=0″, false);
header(”Pragma: no-cache”);

2009/1/17 土曜日

HTML_AJAXでUTF-8以外の文字コードを送信する方法

Filed under: php, AJAX — admin @ 15:29:58

PEAR::HTML_AJAXは便利なのでAJAXを使うときは必ず使っているんだけど、
EUC-JPで作成していた案件でAJAXを使用することになり、
どうしても日本語文字列を検索条件として送信しなければならなかった。

普通に送信すると文字化けして正しく処理してくれないので、
リクエスト文字列をbase64でエンコードして送信。
受信側でデコードすることにより、文字コードがUTF-8でなくても
正しく受け取ることができる。

base64_encode($str);

base64_decode($str);

結構ハマッたのでメモ。

★追記:2009.05.14

BASE64エンコードした結果によっては
正しく送受信できない場合がありました。
おそらく、変換結果文字列中に「+」「=」などが入っている為だと思います。

対応策として、
rawurlencode( base64_encode( $str ) );
という変換をした文字列をリクエストすれば正しく動作するようです。

PHPはGET・POST・COOKIEの値は自動でデコードする
ので、受信側でrawurldecodeする必要はない模様。

型付DataSetとTableAdapterとUpdateと「更新しない」

Filed under: .NET, ADO.NET — admin @ 15:25:42

以前から気になっていたけど使ったことがなかった
型付DataSet(型つきDataSet)という機能を使って
現在作成中の個人的なアプリを実装中にハマッたこと。

TableAdapter#Update(Table)しても
DB(mdb)が更新されてないし、エラーもでない。

1日中悩んで、探して、さまよって、ここで解決
http://www.ailight.jp/blog/unaap/archive/2005/12/07/10249.aspx

ソリューションに追加されたDBのプロパティ、「出力ディレクトリにコピー」が「常にコピーする」になっていると
実行の度に基のDBファイルで上書きされて、中身が空っぽになるという。。
「新しい場合はコピーする」に変更して解決。

2008/6/19 木曜日

ゼロオリジン

Filed under: 未分類 — admin @ 23:10:47

以前にエクセルのシートは1オリジンだが、セルはゼロオリジンと書いたが、
PHPの文字列操作関数は先頭の文字を「0」とするゼロオリジンだった。
まーーーた間違えちゃった!

追記
今、C#でExcelを扱っているんだけど、セルも1から始まるような。。
なんでセルはゼロからって書いたんだろう。

2008/6/7 土曜日

Zend Studio for Eclipse の PHP.exe変更計画1

Filed under: Eclipse, php — admin @ 4:44:34

Zend Studio for Eclipse はすこぶる便利ですが、
インストールされているPHPはmbstringをサポートしていないので、
その場で(ローカル環境で) ちょちょいと実行・確認ができないのが惜しい。

VS.PHPを試用していた時、一番魅力だったのが
実行ボタンを押すとその場でApacheとPHPが起動してブラウザに実行結果を
その場で表示してくれるという機能。

Zend Studio for Eclipseも
似たような事ができるはずなのに、mbstring系の関数を使ってるとエラーになってしまう。
XAMPPの実行ファイルと交換してみたらどうなるか試したい。

とりあえず、下記がPHPの実行ファイルがある場所。

C:\Program Files\Zend\Zend Studio for Eclipse - 6.0.0\plugins\org.zend.php.debug.debugger.win32.x86_5.2.12.v20071210\resources

追記:断念しました(涙)
Zend Studio for Eclipseは起動後にソースをコンパイルするんだけど
(PHPで何故コンパイルなのか。。)
そのタイミングで固まることが多くて結局使わなくなってしまいました。
今は前バージョンのZend Studio5.5でもっぱら開発しています。
VS.PHP買えばよかったか。。。

2008/4/20 日曜日

Excelのシート

Filed under: .NET, C# — admin @ 21:57:27

C#でエクセルの生成を行うプログラムをメンテ中。
いっつも忘れるのだが、
エクセルのシートは「1」から始まり、セルは「0」から始まる。

ゼロオリジンかどうかというのは、言語やアプリケーションによってまちまちなので、
普段から複数の言語や環境で開発をしているとすぐに混乱してしまう。

未来の自分(また同じ事で困ってるであろう)の為にメモメモ。

最近VB.NETもガリガリ書くようになったので、カテゴリに「.NET」を追加。
あまり業務で使う言語を増やしすぎると混乱するなぁ~

2008/1/21 月曜日

Invoke一発

Filed under: C# — admin @ 0:37:50

.NETでは別スレッドからコントロールを操作する場合、From#Invokeメソッドを使わなければいけないようです。
JavaでもGUIはイベントディスパッチスレッドから操作しなければならなくて、
SwingUtilities#invokeLater()を使いまくっていたので、
この辺はまぁ、似たような事情なのかな。
.NETでは
Form#Invoke( (MethodInvoker) delegate{} );
の書式で匿名デリゲート内に処理を書けばいいんですが、
この処理は、要するにメインスレッドで実行されてしまいます。
処理中ダイアログでアニメーションとか気の利いた事をするのに、
このデリゲート内に全て処理を書くとメインスレッドが仕事をしてしまうため、
アニメーションが止まってしまうわけです。カチーンと。
.NETのコントロールにはModelクラスという概念がない為、
別スレッドから、表示情報を更新しようとしてプロパティに値を設定するとエラーが発生してしまうんですよね。
再描画とかしてないのに。
なので、処理中のあちこちにInvokeメソッドを挿入するはめになります。
結構大変です。
なので、Javaと同じようにそのコントロールのプロパティをまとめたモデルクラスを作成し、
コントロール側にはモデルクラスを引数にとって再描画をするメソッドを実装します。
(ついでにモデルを生成するようなメソッドを実装してもいいかもしれない。)
そこで、モデルを受け入れるメソッド内でのみ、一発だけInvekeを使えば処理が局所化できて、ソースも見やすくなるような気がします。
うん、Swingで学んだ事が生きて生きているぞ。よしよし。

次のページ »

HTML convert time: 1.236 sec. Powered by WordPress ME