PHPの最近のブログ記事



最近PHPに触れる機会が増えたので参考に。



スペック


どの程度の技術者が「PHPを習得する上で最低限読むことをお勧めするもの」を公開しているのか?


と気になる方もいると思うので、私のスペック。


基本WEB系です。



エンジニア年数

4~5年。

*nux

コマンドは*nix上で開発作業をしても困らない程度。サーバセットアップからネットワーク設定など一通り可能。

Java

最低限書ける程度。BeanとかSerblet,JSPくらいは書ける。Swing,Springはちょびっと触った程度。案件経験なし。

Python

最低限書ける程度。案件経験若干。

JavaScript

自信を持って書ける。案件経験あり。

PHP

書ける。案件経験多。

C

ちょびっと触った程度。案件経験ないです。

Lisp系

Scheme,Gauche,Clispあたりをちょびっと触った程度。案件経験ないです。(というか、自分で案件作らない限り遭遇することがない気がする。)

...etc


というわけで、多言語経験はあって、PHPも触ったことあります。



PHP.net


言語マニュアルはここを参考にします。


ビルトイン関数をgoogleで検索するときには、「php.net <検索する関数>」などと、


「php.net」と明記し検索します。


(私見ですが、ここ以外のサイトはあやふやな事が書かれていることがあるので、時間の無駄になることがあります。)



PHP.net

http://www.php.net/manual/ja/

最近、個人的に読んでよかったなと思ったページを列挙しときます。



クラスとオブジェクト (PHP 5)

Java使いの方は、この辺を一読していただければ、Javaとの差異を考えながら習得できるのでは。



クラスとオブジェクト (PHP 5)

http://www.php.net/manual/ja/language.oop5.php


PHP 型の比較表

PHPの型比較は違和感あるので、一読。



PHP 型の比較表

http://www.php.net/manual/ja/types.comparisons.php


IBM Developer Works Japan


IBMの開発者が公開してくれてる情報です。



PHP でオブジェクト指向の設計をするための 7 つの良い習慣を身につける

オブジェクト指向を知ってる方ならここのソースコードをみれば大体理解いただけるのかな?



PHP でオブジェクト指向の設計をするための 7 つの良い習慣を身につける

http://www.ibm.com/developerworks/jp/opensource/library/os-php-7oohabits/?ca=drs-jp


5 つの共通 PHP デザイン・パターン

デザパタの実践です。



5 つの共通 PHP デザイン・パターン

http://www.ibm.com/developerworks/jp/opensource/library/os-php-designptrns/


PHP V5.3 では何が新しいのか: 第 1 回 オブジェクト・インターフェースに関する変更

個人的な探求から。



PHP V5.3 では何が新しいのか

第 1 回 オブジェクト・インターフェースに関する変更:http://www.ibm.com/developerworks/jp/opensource/library/os-php-5.3new1/


PHP での名前空間を適切に作成する

個人的な興味ですが、PHP5.3から入った新機能に関する投稿記事です。



PHP での名前空間を適切に作成する

http://www.ibm.com/developerworks/jp/opensource/library/os-php-namespaces/


Ajaxを利用してPHPを開発する、第2回: 「戻る」「進む」「更新」

同じく個人的な探求からですが...。



Ajaxを利用してPHPを開発する、第2回

「戻る」「進む」「更新」:http://www.ibm.com/developerworks/jp/opensource/library/os-php-rad2/


お勧め書籍


この二冊はガチだと思います。



初めてのPHP5

オライリーのPHP本。



初めてのPHP5

http://www.oreilly.co.jp/books/4873112575/


プログラミングPHP 第2版


プログラミングPHP 第2版

http://www.oreilly.co.jp/books/9784873113425/




[PHP]printとechoどっちが早い?


どっちが早いかっていうと、echoだ!って書かれたブログは多いけれども、


理由が曖昧だったから、ソースコード晒す。


quote by: Zend/zend_compile.c(PHP: 5.3.0RC1)



void zend_do_print(znode *result, const znode *arg TSRMLS_DC)


{


zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);


opline->result.op_type = IS_TMP_VAR;


opline->result.u.var = get_temporary_variable(CG(active_op_array));


opline->opcode = ZEND_PRINT;


opline->op1 = *arg;


SET_UNUSED(opline->op2);


*result = opline->result;


}



void zend_do_echo(const znode *arg TSRMLS_DC)


{


zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);


opline->opcode = ZEND_ECHO;


opline->op1 = *arg;


SET_UNUSED(opline->op2);


}



つまり、printは戻り値を設定するための処理を行っているためechoより遅い。


以上、終わり。


以前、rokujyouのブログでevers氏にPython勧めて貰ったことがある。
evers氏の言葉。

この言葉がPython始めた契機の一つ。


ネットつながりだから、現実では逢う事ないと思ってた。
そして、失礼ながら、evers氏のお名前を忘れてた...


で、調べものしてたら気づいたんだけど、自分evers氏とお会いしてる...
java-jaのBBQでの親分氏だ...
[java-ja]BBQに行ってきた。

スパムとかid:everes親分氏がそうだ...!!


もっと話聴いとけば良かった...後悔...orz




で、いまPHPとPythonそれぞれからSQLiteに接続したりして感触つかんでる。
名刺管理の軽量アプリが出来る予定。

PHPじゃ、ウェブアプリしか選択肢なさそうだからPythonに一本化して、wxPythonとかでディスクトップアプリ化しよう。
AnonymousDiaryに
彼氏が○○使ってた。別れたい・・・まとめ

ってあった。そんで小笑いしながら観てたんだけど...

すごく気になる項目。

23: 彼氏php使ってた。別れたい.../2008-11-11 20:15:22

俺のことかぁ!!!!!!

仕事でsymfonyを使う可能性が高いので、自宅のfedora9にインストールする。

必要モジュールをインストール。
# yum install php-mysql php-xml php-pear
ログは紛失したので載せないが、ERRORが発生。

一度、モジュールを消すため一覧表示。
[root@localhost html]# rpm -qa | grep php
php-common-5.2.6-2.fc9.i386
php-pgsql-5.2.6-2.fc9.i386
php-cli-5.2.6-2.fc9.i386
php-pdo-5.2.6-2.fc9.i386
php-mbstring-5.2.6-2.fc9.i386

yumでremove。
[root@localhost html]# yum remove php-common
Loaded plugins: refresh-packagekit
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package php-common.i386 0:5.2.6-2.fc9 set to be erased
--> Processing Dependency: php-common = 5.2.6-2.fc9 for package: php-pgsql
--> Processing Dependency: php-common = 5.2.6-2.fc9 for package: php-mbstring
--> Processing Dependency: php-common = 5.2.6-2.fc9 for package: php-cli
--> Processing Dependency: php-common = 5.2.6-2.fc9 for package: php-pdo
--> Running transaction check
---> Package php-pgsql.i386 0:5.2.6-2.fc9 set to be erased
---> Package php-pdo.i386 0:5.2.6-2.fc9 set to be erased
---> Package php-mbstring.i386 0:5.2.6-2.fc9 set to be erased
---> Package php-cli.i386 0:5.2.6-2.fc9 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Removing:
 php-common              i386       5.2.6-2.fc9      installed         619 k
Removing for dependencies:
 php-cli                 i386       5.2.6-2.fc9      installed         5.9 M
 php-mbstring            i386       5.2.6-2.fc9      installed         1.8 M
 php-pdo                 i386       5.2.6-2.fc9      installed         108 k
 php-pgsql               i386       5.2.6-2.fc9      installed         129 k

Transaction Summary
=============================================================================
Install      0 Package(s)        
Update       0 Package(s)        
Remove       5 Package(s)        

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing        : php-mbstring                                      [1/5]
  Erasing        : php-pdo                                           [2/5]
  Erasing        : php-common                                        [3/5]
  Erasing        : php-pgsql                                         [4/5]
  Erasing        : php-cli                                           [5/5]
ERROR:dbus.connection:Unable to set arguments ('posttrans',) according to signature '': <type 'exceptions.TypeError'>: Fewer items found in D-Bus signature than in Python arguments
Unable to send message to PackageKit

Removed: php-common.i386 0:5.2.6-2.fc9
Dependency Removed: php-cli.i386 0:5.2.6-2.fc9 php-mbstring.i386 0:5.2.6-2.fc9 php-pdo.i386 0:5.2.6-2.fc9 php-pgsql.i386 0:5.2.6-2.fc9
Complete!

モジュールの再表示
[root@localhost html]# rpm -qa | grep php


yumコマンドでPHPのインストール。
[root@localhost html]# yum install php
Loaded plugins: refresh-packagekit
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package php.i386 0:5.2.5-7.fc9 set to be updated
--> Processing Dependency: php-common = 5.2.5-7.fc9 for package: php
--> Processing Dependency: php-cli = 5.2.5-7.fc9 for package: php
--> Running transaction check
---> Package php-common.i386 0:5.2.5-7.fc9 set to be updated
---> Package php-cli.i386 0:5.2.5-7.fc9 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 php                     i386       5.2.5-7.fc9      fedora            1.2 M
Installing for dependencies:
 php-cli                 i386       5.2.5-7.fc9      fedora            2.3 M
 php-common              i386       5.2.5-7.fc9      fedora            224 k

Transaction Summary
=============================================================================
Install      3 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        

Total download size: 3.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): php-common-5.2.5-7.fc9.i386.rpm                   | 224 kB     00:00    
(2/3): php-5.2.5-7.fc9.i386.rpm                          | 1.2 MB     00:00    
(3/3): php-cli-5.2.5-7.fc9.i386.rpm                      | 2.3 MB     00:00    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : php-common                                        [1/3]
  Installing     : php-cli                                           [2/3]
  Installing     : php                                               [3/3]
ERROR:dbus.connection:Unable to set arguments ('posttrans',) according to signature '': <type 'exceptions.TypeError'>: Fewer items found in D-Bus signature than in Python arguments
Unable to send message to PackageKit

Installed: php.i386 0:5.2.5-7.fc9
Dependency Installed: php-cli.i386 0:5.2.5-7.fc9 php-common.i386 0:5.2.5-7.fc9
Complete!

必要モジュールのインストール。
[root@localhost html]# yum install php-mysql php-xml php-pear
Loaded plugins: refresh-packagekit
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package php-xml.i386 0:5.2.5-7.fc9 set to be updated
---> Package php-pear.noarch 1:1.7.1-2.fc9 set to be updated
---> Package php-mysql.i386 0:5.2.5-7.fc9 set to be updated
--> Processing Dependency: php-pdo for package: php-mysql
--> Running transaction check
---> Package php-pdo.i386 0:5.2.5-7.fc9 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 php-mysql               i386       5.2.5-7.fc9      fedora             81 k
 php-pear                noarch     1:1.7.1-2.fc9    fedora            406 k
 php-xml                 i386       5.2.5-7.fc9      fedora             94 k
Installing for dependencies:
 php-pdo                 i386       5.2.5-7.fc9      fedora             61 k

Transaction Summary
=============================================================================
Install      4 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        

Total download size: 644 k
Is this ok [y/N]: y
Downloading Packages:
(1/4): php-pdo-5.2.5-7.fc9.i386.rpm                      |  61 kB     00:00    
(2/4): php-mysql-5.2.5-7.fc9.i386.rpm                    |  81 kB     00:00    
(3/4): php-xml-5.2.5-7.fc9.i386.rpm                      |  94 kB     00:00    
(4/4): php-pear-1.7.1-2.fc9.noarch.rpm                   | 406 kB     00:00    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : php-pdo                                           [1/4]
  Installing     : php-mysql                                         [2/4]
  Installing     : php-pear                                          [3/4]
  Installing     : php-xml                                           [4/4]
ERROR:dbus.connection:Unable to set arguments ('posttrans',) according to signature '': <type 'exceptions.TypeError'>: Fewer items found in D-Bus signature than in Python arguments
Unable to send message to PackageKit

Installed: php-mysql.i386 0:5.2.5-7.fc9 php-pear.noarch 1:1.7.1-2.fc9 php-xml.i386 0:5.2.5-7.fc9
Dependency Installed: php-pdo.i386 0:5.2.5-7.fc9
Complete!

apacheの再起動。
[root@localhost html]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

PEARをアップグレード。
[root@localhost html]# pear upgrade PEAR
downloading PEAR-1.7.2.tgz ...
Starting to download PEAR-1.7.2.tgz (302,744 bytes)
..........................done: 302,744 bytes
upgrade ok: channel://pear.php.net/PEAR-1.7.2
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

PEARチャネルの追加。
[root@localhost html]# pear channel-discover pear.symfony-project.com
Adding Channel "pear.symfony-project.com" succeeded
Discovery of channel "pear.symfony-project.com" succeeded


symfonyのインストール。
[root@localhost html]# pear install symfony/symfony
downloading symfony-1.1.4.tgz ...
Starting to download symfony-1.1.4.tgz (2,133,163 bytes)
.............................................................................................................................................................................................................................................................................................................................................................................................................................done: 2,133,163 bytes
install ok: channel://pear.symfony-project.com/symfony-1.1.4


完了!
LL Futureに行ってきました。以前の現場の大先輩と一緒です。

場所は中野。4駅隣なので楽♪
会場となったなかのZEROの大ホールを貸し切りでした。

チケットが1001枚売れて、来場は800人あまり。
エンジニア800人ってすごw

で、基調講演。2度目の来日、Perlのラリー・ウォール氏。
英語に冗談の日本語少々。Perl6について。

プログラマが文法を追加できたり...まぁ正直、英語わかんないorz
一瞬、Pythonユーザ会の方が通訳してくださるか期待したのですが...

で次がLLの過去、現在、未来について。
Larry Wall氏, Rubyのまつもと氏など、が登場。Schemeはやってるというか、勉強になるらしい。
(SICP本で詰まってるからコメントできないorz)
Larry Wall氏の「I have a dream ...」と聴いて牧師を思い出した...
あと興味あったのはひげぽん氏のもなOS。命令も()らしいが閉じ括弧は補完されるそうです。

次は昼の後。
フレームワークについてのセッション。
Seasarの比嘉氏をはじめやんわりとした進行。
フレームワークを使ってない方が会場で結構居たのだけど、昼後だから挙手しなかっただけなのか、それとも本当に使った事がないのか。

というかウェブフレームワーク中心に話が進んでて気がするのだけど、ウェブ系以外のフレームワークの話を聴きたかった...
Gauch on Railsが興味深かったが、さすがにそこだけに話題を注力する事はなかった。

LLアートのセッションでは、すいません。半分寝てしまいました。
私が直接お世話になることはないかなぁっと思ったのが正直なコメント。
ただ興味深い。Processingでしたっけ?一度使ってみたい。

で、どう書く?セッション。
爆笑の嵐。というか、ネタ合わせまでしたのかな?って思った。
ソースコードも西尾氏のコードは楽しいし、すごい発想力。
(ラストの抽選会では西尾氏は2階席で大はしゃぎしながらボールを投げてました♪)

プロゴルファーの方もすごい。ビビった(ビビッと来た)
世の中に天性を持った方が居るとともに、現場で使われたら、「それって難読化wというか勘弁してください」って突っ込んじゃう。

で最大の山場は「古い言語、新しい言語」のセッション。
JSRubyはとっても興味あるし、FlashをiPhone上で動かすって発想に驚いた。
Javaをバイトコードで実行ってなるほどと思うけど、そんな簡単に実装できないよとか思いつつ聴いてました。
そっちの話をもっと聴こうと思う。...にしてもレベル高い。

ライトニングトークはネタの集まり。
java-jaのYohsiori氏も参加してました。
興味あるのは、Grass。あれって発想変えると数字0〜9でも作れるだろうな。そしたら、ほぼ暗号w
あとは、クライアントDBの話。
残りは爆笑系のNario,自走式Webサーバーあたり。

以上です。去年のLL魂はチケット購入したのにいけなかったので今回は参加できてよかった♪
それと、知人と会場で会えたのが嬉しかった。
来年も参加するぞ!!

帰り、居酒屋で大先輩と吞んでました。
そしたらラリーさんとLLのスタッフの皆さんが入ってきたので記念撮影。
Larry Wall
くっ...英語がもっとできればコミュニケーション取れたのにorz
(我ながらミーハーだ...)

LL Future関連:
[misc]LL ひゅーちゃー
基本愚痴のある意味ネタです。


ひさびさにPHPを触りました。
他人が作ったコードがお客様に納品されたもの。それを保守開発で私が担当。

何に驚いたって、class使わないのはよくお目にかかるけど...
functionを一つも使わないのは初めてだった...


いや、間違ってはないよ。処理を上から追えばいいから楽だよね。うん。
だけど、もっと 開発しやすく出来たでしょうに...


作った人と電話で何度となく話したけど、このひとサイバーなんたらってブログで有名な会社の元ウェブ系デザイナーさん。

デザイナさんでめちゃくちゃコードかける人も入れば、プログラマでデザイン出来ちゃう人がいる訳だし。
でもね。もうちょっとうまく設計とともに実装してくれ、お願いだ...

追記:「ひとまず納品のために動くものを作りました。」って感じのコードでした..
追追記:納品が完全に終わる前だったのでクレーム出そうと思って実際に話してたらあまりのいい訳に呆然としてしまった。=>期間がなかったとか、設計ってそんなの必要ないですよとか。
=>メモ書き程度の設計もしないのか!
=>セキュリティのせの字もでてこないのかお前は!

追追追記:この前、PHPカンファレンスで聴いた事を思い出した。言語自体が悪いんじゃなくて、教育が行き届いてないんだなと。

技術者が入れ替わり立ち代わり。ドキュメントは存在せず。仕様も曖昧。

そんな保守開発。

昔、常駐開発していた技術者の方が事務の女性にこう言ったそうな。

「スパゲティーコード。」

事務の女性はコードが読めないので、何の事か分からなかったそうな。むろん私は理解しています。その技術者の意味する物を。

そんな現場に今月から常駐してます、rokujyouhitomaです。


推測できる原因と改善案を気づいた限り挙げたい。
推測できうる原因
  1. 設計期間を設けず、かつ仕様も曖昧なまま開発を行ったため。
  2. ドキュメントの作成を行わなかったため。
  3. 人材が入れ替わり。
  4. 引き継ぎを行わなかったため。
  5. 後続で入った技術者がその場しのぎで修正を行ったため。
  6. 管理者兼依頼者は元SEではあるものの、コードを管理(読む、書く)出来ない。さらに言及すると上級技術者がいない。
大体こんな感じ。特に人材が入れ替わり立ちかわりであり引き継ぎ資料や、ドキュメントが喪失した事による影響が極めて大きい。
上記の結果、バグが大量発生し更に時間が取られるスパイラル。プロジェクト途中参加は最悪だ。。。

では改善案は?以下に気づく限り列挙する。
改善案
  1. コメントすらないため、コメントの蓄積を行う。初歩の初歩。
  2. 技術の共有かを行う。共有化方法はtrac,wiki,そして対話を強める!!意思疎通するのだ!
  3. 管理者兼依頼者に作業時間、環境構築のための理解を求める。説明する。最低subversion環境は構築しバージョン管理を行う。
  4. MVCモデルの実践というか、HTMLとロジック部分、DB接続部分の分離ぐらいしようよ。。。クラス使おうよ。。。(泣き
と涙が出てくる。
涙が出てくる。
第14回 オープンソーステクノロジー勉強会があるそうな。

モバゲー話が聴けるそうな。

日時は7月8日だそうな。

行ってくるわ。

第14回 オープンソーステクノロジー勉強会
7月8日(火) 19:30 - 20:30
株式会社ディー・エヌ・エー 川崎修平さん
http://labs.gree.jp/Top/Study/20080708.html


追:またまたPHP業務だよ。
しかも、過去最悪のこんがらがったコード。
リバースとリファクタでやっつけてやる!!

あわせて読みたい

  • あわせて読みたいブログパーツ

Lingr java-ja

ウェブページ

Powered by Movable Type 4.1