Posted on

オブジェクト指向について学んだこと

CakePHPで実務をやり始めて約5ヶ月、まだまだ分からない事は沢山ありますが、少しずつイメージできる部分も出てきました。今回はCakeを身に付けていくにあたり学んだオブジェクト指向について書きたいと思います。
昔プログラミングを勉強した時にはオブジェクト指向の概念もなく、今までほとんどオブジェクト指向を意識することなく過ごしてきました。そんな僕にとっては、オブジェクト指向とはどういうものか、オブジェクト指向を使うとどう便利になるのか、ほとんどイメージできませんでした。それを会社の技術リーダーに伝えたところ、1冊の参考書を持ってきてくれました。
その中で、「なるほど!そういうことか!!」と思えたのが、「ポリモーフィズム」についての解説の例えです。

続きを読む オブジェクト指向について学んだこと

Posted on

PHP小ネタ @の意味

PHPのサンプルソースをネット上で検索していると、自分が普段使わない言語機能を使っているソースに出くわすことがあります。

たとえば、以下のようなソースの@の意味、すぐに分かりますでしょうか?

$val = @$data[$key];

僕は正直、意味がまったく分かりませんでした。

ポインタのアドレス参照でもないしなー、と思ってネット上で調べようとしたところ、これがなぜだか分からない……
そもそもこの@が文法上のどのカテゴリに入るものなのかがわからなかったので、うまくヒットする検索が中々出来なかったのですね。

結果を言いますと、この@は、

続きを読む PHP小ネタ @の意味

Posted on

PHPEXCELでEXCEL1ファイルで表など記述済3シートをそれぞれコピーして業務にあったEXCELを出力する方法例

複数シートを対象にEXCEL出力したい場合の参考になれば幸いです。たとえばですが、下記ソースで、ベースとなる何も記入していないEXCELファイル(test_base.xlsx)を読込、請求書(定型フォーマット)、請求明細書(定型フォーマット)、請求書控え(定型フォーマット)各3シートのEXCELファイル(test3sheet.xlsx)を1つ読み込み、それぞれのシートを1つずつコピーして、値を出力(例:A2にtest1から3を出力)して、一番最初に読み込んだシートを削除するのを、サンプルとして記載しました。
このプログラムを動作させた環境は、phpexcel 1.8.0 cakephp 2.6.7です。

続きを読む PHPEXCELでEXCEL1ファイルで表など記述済3シートをそれぞれコピーして業務にあったEXCELを出力する方法例

Posted on

Cake2で複数ファイルをUPする

Cake2で複数ファイルをHtml5の機能を使って簡単に上げれるとあったので試してみました。

$this->Form->input(‘Model.field’, array( ‘type’ => ‘file’));
で単体のファイルが上げれるところを
$this->Form->input(‘Model.field’, array(‘type’ => ‘file’, ‘multiple’));
と書くだけで簡単に複数ファイルが上げれるということでやってみたのですが動かない・・・

何でだ!!とはまる事一時間ほど・・・
よくよく見てみるとfieldの後ろに「.」ピリオドが要るではないか!!という事で
$this->Form->input(‘Model.field.’, array(‘type’ => ‘file’, ‘multiple’));
と書いてあげるとすんなり動いてくれました。
最後のピリオドはお忘れずということでした。

Posted on

MVCモデルを勉強しました

当社に就職し、技術部でPHPプログラミングの業務をさせて頂いて早2ヶ月半が経ちました。前の勤務先では、システムを運用する側の仕事でしたので、専門的にシステム開発をするということはありませんでした。またPHP言語も入門書に触れた程度で、本格的に取り組むのは今の仕事が初めてになります。今回の記事では、こんなシステム開発初心者の僕がこんなこと勉強して便利だなと思うようになったことについて書きたいと思います。
当社では、PHP用の開発フレームワークとしてCakePHPを使っていますが、そこで出てくるのが、「MVCモデル」という開発手法です。今まで耳にする程度で理解しようともしなかったこのMVCモデルとは、どんなものなのでしょうか。今までプログラミング経験はある(といってもスクリプト程度の簡易なものですが)ものの、フレームワークを使った大規模なプログラミングの経験はなく、コードを役割ごとに分けて書く習慣が全くなかった僕としては、MVCモデルが出てきた時、逆に頭の中が混乱してしまいました。

続きを読む MVCモデルを勉強しました

Posted on

PHP7、RC版の配布始まる!

2015年、政治的にも経済的にも気象的にもいろんなことが起こって激動の日本ですが、世のWEBアプリケーションエンジニアの皆さま的には2015年の一大事は

PHP7のリリース

になるかもしれません(^^)

PHP4から5になるのに4年かかりましたが、6が欠番になる騒動も含めて11年ぶりのメジャーヴァージョンアップになるわけですから。

もうRC(リリース候補)版のリリースは始まっておりまして、

ソースはコチラ

すでにRC版でいろいろ試しておられるエンジニアの方も多いと思われますが、実際にPHP7の正式版がリリースされるのは11月になりそう、とのことです。
当初は10月半ば、と言われていたので、それほど大きな遅延はない、という感じでしょうか。

個人のベンチマークテストではPHP7.0は5.6の2倍近く速い結果が出たりしてるそうなので、楽しみです。

とは言うものの、

続きを読む PHP7、RC版の配布始まる!

Posted on

チェックボックスをラジオボタンのような動作にする。

Webで検索して、同様の記事があり、私の作成している
CakePHPで適用したところ、
チェックするとチェックができなく困っていました。
そこで、同じ動作ができないか、工夫してみました。
以下がそのソースです。
JQUERYは読み込んでいることが前提ですが、
$(this).attr(‘checked’, true);
の動作がおかしい場合、試してみてください。

続きを読む チェックボックスをラジオボタンのような動作にする。

Posted on

RSS内の画像を取得する

RSSで記事一覧を取得する際に画像を一緒に取得して欲しいという要望があったのでこんな形で取ってみました。

$rssurl = "http://xxxxxx.xml";
$xml_data = file_get_contents($rssurl);
$rssdata = XML_unserialize($xml_data);
foreach ($rssdata['rss']['channel']['item'] as $val){
// リンクのURLを見に行って最初に現れる画像のsrc取得
$url = $val['link'];
$src = getChildRss($url);
if (!empty($src)){
$img = "";
echo $img;
}
}
}
// リンクのRSSを見に行って最初に現れる画像のsrc取得
function getChildRss($url){
$xml_data = file_get_contents($url);
$rssdata = XML_unserialize($xml_data);
if (!empty($rssdata['rss']['channel']['item'])){
foreach ($rssdata['rss']['channel']['item'] as $val){
// 最初に現れるimgタグ取得
preg_match_all("//", $val['content:encoded'], $img);
if (count($img[0]) !== 0) {
// imgタグ内のsrc取得
preg_match_all('/src="(.+?)"/', $img[0][0], $src);
if (count($src[0]) !== 0) {
return $src[1][0];
}
}
}
}
return "";
}
Posted on

TCPDFでCODE39のバーコードの読取精度が悪いので調整してみました。

この前の案件でTCPDFでCODE39のバーコードを表示することがあり、
バーコード小さくしてを印刷すると黒い線が太くて白い部分がつぶれるので
TCPDF自体を修正し、黒線を細くすることで読取精度を上げてみました。

以下修正個所です。 

tcpdf/tcpdf.phpの15421行目

foreach ($arrcode['bcode'] as $k => $v) {
// modified $v['w'] にバーコード1線分の太さ1か3で入っているので細さを調整したい数値(0.1)をセット
$bw= ($v['w'] > 1) ? $v['w'] * $xres - 0.1 : $v['w'] * $xres + 0.1;
if ($v['t']) {
// draw a vertical bar
$ypos = $y + $vpadding + ($v['p'] * $barh / $arrcode['maxh']);
$this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']);
}
$xpos += $bw
}

これで認識率上がりました。0.1の数値を調整することでもうちょっと認識率上げれそうでした。

Posted on

入力された情報が前回値と変わっている場合に、入力文字を変更(赤く)する方法

cakephp入力フォームで、前回と変更になった入力値は入力文字を変更(赤く)して表示したい場合のサンプルです。
前提条件
前回入力した値と今回入力する値は別で情報を管理します。
その上で、前回と今回の差がわかる状態で判断します。
モデルはSampleを使用します。

続きを読む 入力された情報が前回値と変わっている場合に、入力文字を変更(赤く)する方法