2007/07/02

PHPをお勉強中


最近は、オープンソース系開発環境の知識が必要だなぁと思い、PHPのお勉強を始めたところです。

セキュリティや規模の大きな開発に多少の不安はありますが、何のかんのいいつつも、現状でのWebサイト構築では、PHPのアドバンテージは大きいんですよね。

PHPはライブラリが充実しているので、Webサイトをさくっと仕上げたい場合に便利かと。また、レンタルサーバでサポートされることも多いのがいいですね。

「じゃあ、Perlでもいいじゃん。Perlならバッチも書けるよ」という声も聞こえてきそうですが、ヘタレの私にはPerlの自由度の大きさが、難解さに見えてどうも敬遠してしまいます。。。

 

■お勉強その1まるごとPHP!〈Vol.1〉

とりあえずは、この本でPHP5の概要をお勉強してみました。

全部を細かく読んだ訳ではないのですが、PHPのインストールから、オブジェクト指向、PEAR、Smarty、Mojavi、Webセキュリティなどにも触れられていて、結構良かったです。

この本と下記サイトの内容を参考にして、自宅のPC(Windows XP)に、PHP5.2.3+Apache2.2.4+MySQL4.1をインストールしてみました。

 

 ■お勉強その2速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応

PHPの具体的な文法などは、こちらの本でお勉強です。

Amazonのコメントでは、否定的な内容もありましたが、PHP+MySQLでWebサイト構築の理解をつかむにはいい本だと思います。まあ、確かに、プログラムを一度も書いていない人には向かないかもしれませんね。

で、PHPの文法を見ていて、ちょっと困ったなと思う部分がありました。

 

・微妙なオブジェクト指向

PHP5からはオブジェクト指向がサポートされているので、開発をする場合はオブジェクト指向を使いたいところですが、ちょっと微妙な部分があるようですね。

それは、メソッドの「オーバーロード」です。

メソッドのオーバーロードというのは、メソッドの引数が違うなら、同じメソッド名を使うことができるという、オブジェクト指向言語では通常実現されている機能です(少なくともJava, .NET, C++では)。

これが、まともに使えないのは、ちときついかも。

あと、スーパークラスのスタティックフィールドを参照するために、「parent::$変数」というものがあるようなのですが、コンストラクタならともかく、スタティックフィールドが継承されないのが不思議です。

まあ、抽象クラスやインターフェースなど、その他のオブジェクト指向の機能は実装されているようなので、大きな問題にまではならないだろうとは思います。

 

・微妙な例外処理

 PHP5では、例外処理として、try ~ catch節がサポートされているのですが、なぜか finally句がないようです。

まあ、finallyに書く内容を、catchごとにベタ書きするか関数を作れば問題はないのですが、ちょっと面倒ですね。。。

 

まあ、微妙だと思う部分はありますが、PHPの用途を考えれば、なんとかなりそうな気もします。

 

■お勉強これから - PHPサイバーテロの技法―攻撃と防御の実際

 この本は、たまたま行った書店で購入したのですが、Amazonのコメントでは絶賛ですね。

Webサイトを構築する際、どのようなセキュリティ対策をすればいいかという内容は、意識していれば入手可能ですが、じゃあ実際にどうやって攻撃されるのかを知る方法って、なかなか見つからないんですよね。

まだ読んではいないのですが、今後PHPのお勉強が進んだ際には、じっくりと読んでみたい本です。

 

■余談

レンタルサーバとして、さくらインターネットに申し込んだのですが、さくらインターネットではRubyが使えるんですよね。

以前、下記の本を読んだ際に、Rubyは確かにおもしろいと思ったので、PHPで扱えないバッチ部分などがあれば、Rubyでもちょっと遊んでみたいと思います。

 

Tags: ,

スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

こんばんは、dara-jです。

私も最近PHP始めました(というか仕事でやらざるを得ないんですが...)が、なかなか苦労してます。C#とJavaScriptの両方に慣れてるとどちらともつかずに微妙な感じなんですよね。

> コンストラクタならともかく、スタティックフィールドが継承されないのが不思議です。
親クラスでprotectedかpublicなら、継承クラスでも「self::$~」で参照できますよ。

> なぜか finally句がないようです。
あー、これ気づかなかった。C#なんかだとアンマネージリソース使うときにcatchすっとばしてfinallyで後始末なんてことをよくやってるので、これは不便ですね。

結局言語は使わないと身につかないので、一生懸命がんばりましょう。

dara-jさん、コメントありがとうございます!

dara-jさんもPHPを始めたんですね。私も、なんとなくASPのころの混乱を思い出し、微妙な感じがしてますが、きっとSmartyとかを使うようになれば変わることを期待です。

>継承クラスでも「self::$~」で参照できますよ。
あー、なるほど。ちゃんとアクセスするための仕組みが用意されていたんですね。情報ありがとうございます。

あと、PHPにオーバーロードがない理由がなんとなく分かりました。PHPには、基本的に型情報がないので、オーバーロードを言語に実装しようがなかった気がします。

言語は、かなりの部分がなれですよね。

がんばります。

>あと、PHPにオーバーロードがない理由がなんとなく分かりました。PHPには、基本的に型情報がないので、オーバーロードを言語に実装しようがなかった気がします。

そうですね。この辺はJavaScriptとか他のLLでも似たような感じでしょうね。
ちゃんと引数にアクセスする手段は用意されてますしね。

> 言語は、かなりの部分がなれですよね。
慣れ、ですね。慣れないとマニュアル引くときも勘が働かなくてしんどいです。

あ、あと個人的に「やられた」と思ったのは、対象がオブジェクトや配列など普通は参照が渡されるものでも&つけないと代入が常に「コピー」ってのはびっくりしました。
まぁWebアプリケーションはメモリ空間のライフサイクルが短いので問題ないんでしょうけど...

お互いがんばりましょう!

dara-jさん、コメントありがとうございます!

お。&を付けないと参照渡しにならないんですか。
確かにそれは、びっくりですね。なんとなくVBライク。
珍しいというかなんというか。。。

いろいろ情報ありがとうございます。

代入時の値渡し/参照渡しの挙動はPHP4とPHP5で違ってましたね...

あるnakagamiの日記さんの記事に詳しくでてました。
http://blog.so-net.ne.jp/nakagami/2005-11-10

いやはや、お恥ずかしい...

dara-jさん、コメントありがとうございます!
また、フォローもありがとうございました。
PHPって、分かりにくいと言うか、なかなか奥が深いんですね。
また、Zend Frameworkのソースを読むとはすごいですね。
その発想はありませんでしたw

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    現在、Enty で支援を受け付けています。もしよければご支援ください。



    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから