「PHP入門」を読む その3
PHP入門←教材はここ!
ユーザー定義関数
- 関数定義に関してASとほぼ同じ。
- 関数定義の一般的な書式
function 関数名() {
処理に必要なプログラム
}
- 戻り値がある場合
function samp() {
return(戻り値);
}
- サンプル
<?php function strong($text) { return("<em>$text</em>\n"); } print(strong("この文字は強調されます")); ?>
- 引数の値を渡す場合と、引数の参照を渡す場合があって、参照渡しをすると変数本体が変化する。
- なるほど意識してなかったけどこんなやり方があったのか。
- サンプル
<?php function num($a) { $a = ($a +2) * $a; return $a; } $b = 5; print("\$b の初期値は". $b. " です<br>\n"); $c = num($b); print("関数に渡された \$b の値は". $b. " です<br>\n"); print("関数の実行結果は ".$c. " です"); ?>
- 出力結果
$b の初期値は 5 です
関数に渡された $b の値は 5 です
関数の実行結果は 35 です
- サンプルの「num($a)」を「num(&$a)」に変更し参照渡しした出力結果
$b の初期値は 5 です
関数に渡された $b の値は 35 です
関数の実行結果は 35 です引数にアンパサンド「&」をつけると、「参照渡し」(リファレンス渡しとも言う)となり、引数として渡された変数自体の値を変化させることができます。
クラスとオブジェクト
- クラスの定義もほぼASと同じ感じ。オブジェクト型言語ってみんなこんな感じなのかな。
- サンプル*1
class Shopping { var $item = "コンピュータ"; var $price = 99800; // ここまでメンバ変数の設定 function getTotal() { $tax = $this->price * 0.05; return $this->price + $tax; } // ここまでメソッドの定義 }
- さりげなく書いてある「$this->price」って何?と思ったら、次に書いてあるっぽい。
- はい、オブジェクトの生成は次の書式。
$変数 = new クラス名();
- 定義したクラスを利用するために「new」でオブジェクトの生成。
- これにより指定した変数にオブジェクトが格納されると。なるほど。
- そして実際にクラスのメンバ変数やメソッドを取り込む記述が以下。
$newShopping = new Shopping(); $item = $newShopping->item
- ここでやってるのは、変数newShoppingにクラスShoppingのオブジェクトを格納して、変数itemにクラスshoppingのメンバ変数itemを格納してるってことかな?
- このあたりの説明がほぼ無いのが初心者には厳しいのでは。
- 次にサンプルコードあり。
- サンプル
<?php class Shopping { var $item = "コンピュータ"; var $price = 99800; function getTotal() { $tax = $this->price * 0.05; return $this->price + $tax; // 税込価格の設定 } } $result = new Shopping(); $item = $result->item; print("$item の会計は".$result->getTotal()."円になります\n"); ?>
- 出力結果
コンピュータ の会計は104790円になります
- だいたい思った通りに動いてますね。
- メソッド呼び出すのも「$result->getTotal()」と変数と同じのりなんだ。
日付と時間
- おっといきなりいっぱいあり。ワールドワイドだ。
- 普通に扱うのはUNIX時だけあればいいと思ってたけど、世界協定時UTC*2でいいのかな。日本は+9hですね。
- 日付情報の取得にはgetdate()関数。
- 連想配列として各要素をインデックスに持つ。
- 細かく覚えなくてもいちいちリファレンス参照したらいいかな。
- 以下にサンプルコードの改造版。
- サンプル
<?php $today = getdate(); print("$today[year]年$today[mon]月$today[mday]日<br>\n"); print("現在の時刻$today[hours]時$today[minutes]分$today[seconds]秒<br>\n"); print("今年1月1日から $today[yday]日目です<br>\n"); print("$today[weekday] $today[month]/$today[mday]/$today[year]"); ?>
- 出力結果
2009年3月10日
現在の時刻14時50分42秒
今年1月1日から 68日目です
Tuesday March/10/2009
- 時刻も書き出せるようにしてみました。
- もうひとつdate()関数という便利そうなモノが!
- 引数の指定によっていろんなフォーマットで時刻を表示できるとのこと。
- サンプル
<?php $today = date("Y/m/d l H:i:s"); print($today); ?>
- 出力結果
2009/03/10 Tuesday 14:52:40
画像処理
<?php header("content-type: image/png"); $image = imagecreate(100,100); //横幅と高さ指定 $back = imagecolorallocate($image, 0, 0, 0); //RGBで色指定 $red = imagecolorallocate($image, 255, 0, 0) imagepolygon( $image, array( 10, 80, 80,80, 80, 10 ), 3, $red ); //多角形の生成 imagepng($image); //PNG画像をブラウザに出力 imagedestroy($image); //メモリのから画像リソースの解放 ?>
- 出力結果
- このサンプルをいつも通りにブラウザで見てもエラーが出た。imgタグで呼び出す必要あり。
- 多角形生成のimagepolygon()関数の書式は以下。
imagepolygon (画像リソース, array(頂点座標), 頂点総数, 色番号);
- 気になるのが「$back」というのは画像処理クラスのメンバ変数だったりするのかな。
セッション管理
- 要は認証ページなどで同一ユーザーであるかの判断が必要な場合の話のよう。
セッション管理では、認証が成功したクライアントに対して、1つの 「セッションID」 を発行します。そのセッションIDをクライアントのクッキー、あるいは URLを書き換えることによって同一ユーザとみなし、セッション中の管理が容易く行えることになります。
- セッション変数って何度も言ってたらゲシュタルト崩壊しそう。
- ブラウザは渡されたセッションIDをクライアントに送ることで認証ページへすすめる。許可書の発行ですね。
- セッション変数に値を格納するのが次の書式。
$_SESSION[セッション変数名] = 値;
- サーバにはセッションの数だけセッションIDを保存したファイルが生成される。
読了
- つーわけでさらっと全体読みました。本当に概要的な感じ。
- 詳しくは公式マニュアルで調べろってことかな。
- もう少し詳細な系統立てたテキストも読んでみたい気がします。
- もうちょい探してみるか。
「PHP入門」を読む その1
PHP入門←教材はここ!
いつものように教材を読みながらポイント書き出したり思ったこと書き並べます。
PHPとは
- 「PHP is Hypertext Pre-processer」*1の略だと。なるほどHTML(Hypre Text Markup Language)と相性いいのは当たり前か。
- PHPのメリットとしてあげられているのは以下。
PHPの実体は、Webサーバに置かれるソフトウエアの Apacheモジュールとして動作するスクリプト言語を実行する環境を指します。HTML文書中に記述されたスクリプトを PHPが実行し、結果を HTMLデータとしてWebブラウザに出力する仕組みがあります。
PHP制作環境の設定
これは前回Mac上での動作を確認してるのでスルー。
PHPスクリプトの基本構造
- 早速以下のサンプルコードを確認してみました。
- コード
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- Shift_Jisから変更 --> <title>PHP入門</title> </head> <body> <p>今日は、<?php echo date("Y/m/d"); ?> です。</p> </body> </html>
- 出力結果
今日は、2009/03/09 です。
定数と変数
- 定数の定義にはdefine()関数
- 書式
define("定数名","値");
- サンプル
<?php define("banban", "ばんばん"); print(banban); // 定数banban の中身を表示する ?>
- 変数定義には「$」を用いる。
- 書式
$変数名 = 変数に代入する値
- サンプル 論理値
$banban = true;
- サンプル 整数
$banban = 2000;
- サンプル 浮動小数点
$banban = 3.14159265;
- サンプル 文字列
$banban = "ばんばんは当サイトの作者のハンドルネームです";
- ずっと「banban」って何かなーと謎だったんで最後に分かりました。
- これからはバンバン先生と呼びます。
- 変数の命名規則として以下の記述あり。
PHPの変数名は、先頭に数字があってはいけません。基本的には、大文字と小文字を区別しませんが、対象によって異なる場合があります。
- なんと日本語も使えるらしい。使いたくないけど、怖いから。
配列
- 一番簡単な配列への代入法。
<?php $banban[] = "HTML"; $banban[] = "XHTML"; $banban[] = "XML"; ?>
- これだと順番にインデックス0から2までに格納できる。
- array()関数を使うと一度に記述できる。
<?php $banban = array("HTML", "XHTML", "XML", "XSLT", "RSS"); print($banban[1]); ?>
- 出力結果
- インデックスの区切り文字を指定して配列に格納していくのがexplode()関数。
<?php $banban = explode(",", "HTML,XHTML,XML,XSLT,RSS"); print($banban[3]); ?>
- 出力結果
- これは本当に実用性がありそうな関数。
- サンプル
<?php $fruit = array("Apple" => "りんご", "Orange" => "みかん", "Grape" => "ぶどう"); while(list ($key, $val) = each($fruit)) { print ("インデックスの $key は、$val です<br>\n"); } ?>
- 出力結果
インデックスの Apple は、りんご です
インデックスの Orange は、みかん です
インデックスの Grape は、ぶどう です
- ここで使われてるlist()関数について分かんないとよく飲み込めないんでそっちも参照してみた。
- 書式
list(変数) = array (インデックス);
- サンプル
list($orange,$apple,$grape) = array("りんご", "みかん", "ぶどう"); print ("$orange $apple $grape");
- 出力結果
りんご みかん ぶどう
- どうやらlist()関数は、配列の中身を変数に代入する関数。
- でもこれだけだと連想配列のサンプルがいまいちわからないんでecho()関数も参照。
- 書式
each (配列);
- サンプル
$fruit = array("りんご"=>123, "みかん"=>456, "ぶどう"=>789); print_r( each($fruit) );
- 出力結果
Array ( [1] => 123 [value] => 123 [0] => りんご [key] => りんご )
- echo()の説明が短すぎて分かりにくいけど、多分配列の一個目の要素について出力してるっぽい。
- 出力結果のうち「value」と「key」は意味分かるけど「1」と「0」はなんだろ?
- 単純に「[1]=[value」、「[0]=[key]」なのかな?
- あとprint_rって言うのも気になったんで参照。
引数で指定された変数の情報を参照します。文字列、整数、倍精度実数を指定した場合には、その値を出力します。配列やオブジェクトを指定した場合には、キーとインデックスを示す形式で出力します。
- 出力結果を見てみると配列のインデックスと要素を返してます。
演算子
- このあたりはだいたいほかの言語でもいっしょなので流し読み。
- ただひとつ「.=」という「連結して代入する」というのが気になったので以下のようなサンプルを作って走らせてみた。
- サンプル
<?php $x = 10; $y = 20; $x .= $y; print("最終的に x= $x <br>\n"); $a = "ABC"; $b = "abc"; $a .= $b; print("最終的に a= $a <br>\n"); $a.=$a; print("aにaを連結代入すると a= $a <br>\n"); ?>
- 出力結果
最終的に x= 1020
最終的に a= ABCabc
aにaを連結代入すると a= ABCabcABCabc
- 単純に文字列として連結していくということかな。
「PHP入門」を読む その2
PHP入門←教材はここ!
文字列
- 文字列定義には以下の方法。
- シングルクォーテーション「'」
- ダブルクォーテーション「"」
- ヒアドキュメント「<<< ID」
- 以下がバックスラッシュ「\」でエスケープすべき文字
- '
- シングルコーテーション
- "
- ダブルコーテーション
- \
- バックスラッシュ
- t
- タブ記号
- n
- 改行記号
- $
- ドル記号
- r
- キャリッジリターン(改行コード)
- 「コーテーション」なのが気になる(笑)
- 「\n」と「\r」の違いが分かるような分からんような。
- 文字データの連結は「.」や「+」で。
- 文字列を扱う関数の例としてstr_replace()関数が。
- 書式
str_replace("置換対象の文字列","置換する文字列","最初の文字列");
- サンプル
<?php $beginner = "初心者のためのホームページ作り"; $replace = "ホームページ作り"; $scriptphp = "PHP入門"; $word = str_replace($replace, $scriptphp, $beginner); print($word); ?>
- 出力結果
初心者のためのPHP入門
- わかりやすい。
ループ
- PHPでは4つのループ構文が用意されてるとのこと。
- まず「while」文。
- 書式
while (式) {
処理スクリプト
}
- サンプル
<?php $a = 0; $lectur = array("HTML","XHTML","XML","JavaScript","PHP"); while($a < 4) { print($lectur[$a]). " \n"; //文字コード「 」は半角スペース $a++; } ?>
- 出力結果
HTML XHTML XML JavaScript
- これとても良くあるパターン。大丈夫。
- 次は「for」文。
- 書式
for (初期値式; 条件式; 増減式) {
処理スクリプト
}
- サンプル
<?php for($a = 0; $a < 4; $a++) { $lectur = array("HTML","XHTML","XML","JavaScript","PHP"); print($lectur[$a]). " \n"; } ?>
- 出力結果
HTML XHTML XML JavaScript
- for文の中で配列定義してるので、外に出して試してみたけど、同じように動いた。
- 次は「do while」文。
- while文と条件判定するタイミングが違う。
- 書式
do {
処理スクリプト
}
while(式);
- サンプル
<?php $a = 0; $lectur = array("HTML","XHTML","XML","JavaScript","PHP"); do { print($lectur[$a]). " \n"; $a++; } while($a < 4); ?>
- 出力結果
HTML XHTML XML JavaScript
- これも教科書通り。大丈夫。
- 最後が「foreach」文。なじみがない。
- 配列用の構文らしい。
foreach構文は、PHP4 から実装された比較的新しい制御構文です。このループ制御では、指定した配列の要素を1つづつ抜き取って処理します。
- 書式
foreach( 配列 as $key => $value) {
処理スクリプト
}
- サンプル
<?php $a = array("Apple" => "りんご", "Orange" => "みかん", "Grape" => "ぶどう"); foreach( $a as $key => $value) { print("$key は、$value<br>\n"); } ?>
- 出力結果
Apple は、りんご
Orange は、みかん
Grape は、ぶどう
- これさっきlist()とecho()使ってやってなー。こっちのほうが簡単。
- そして最後に「break」文。ループから抜けるやつ。
- foreach以外で使う。
- サンプル
<|php|
|
- 出力結果
HTML XHTML XML JavaScript ループを抜けます
PHP勉強始めてみました。
準備
- PHPについてまずWEBで勉強しようとググってみる。
- 出版系のサイトより個人サイト系が多い感じ。
- いくつか読んで一番しっくりくるとこ見つけた。
- ここを流し読みしつつまず概要をつかんでいきたい。
- ローカル環境でサンプルを動かしたいのでMacOS10.5でPHPを動かすようにするための作業を調べる。
- いろいろあったけど基本に忠実なここのやり方を参照してその通り実行。
- ただ実はこのサイトの説明はちょっとたりなくてここも参照。
<?php phpinfo(); ?>
- そのファイルをサイトフォルダ内に置き、ブラウザ「http://localhost/~username/info.php」を開いたらPHPの情報ページが表示された。稼働確認完了。
- 「サイト」フォルダ内にないと動かないのか良く分かんないけど、他のとこに置くとPHP作動しない模様。
速習Webデザイン ActionScript3.0を読む その11
![速習Webデザイン ActionScript 3.0 速習Webデザイン ActionScript 3.0](https://images-fe.ssl-images-amazon.com/images/I/51siTwBEaxL._SL160_.jpg)
- 作者: 林拓也
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/13
- メディア: 大型本
- 購入: 7人 クリック: 137回
- この商品を含むブログ (13件) を見る
part9 カスタムクラスの定義
-
- 一週間あいだ空いての再開。
- 一番気になってたところかも。
カスタムクラス定義の基本はプロパティ(クラス用の変数)とメソッド(クラス用の関数)の定義です。
p220 Lesson-1 キャプション
package{
public class クラス名{
var プロパティ名 : データ型 ; //プロパティ定義
function クラス名(){ //コンストラクタ定義}
function メソッド名 : { //メソッド定義
}
}
}
import flash.display.MoviClip; ←クラス名は完全修飾名で記述。
import flash.display.*; ←flash.displayパッケージ内のクラス全てをインポートできる。
- 02-01 クラスの継承
- 02-02 クラス継承の書式
package{
public class サブクラス名 extends スーパークラス名{
}
}
-
- なかなか面倒というか分かりにくい、覚えないといけないこと多そう。
- コンストラクタに関して
- スーパークラスのコンストラクタが引数を必要とする場合、サブクラスのコンストラクタから明示的に実行する必要あり。サブクラスからスーパークラスのコンストラクタを呼びだすのには「super()」を使う。
- 埋め込みアセットクラスとクラス定義ファイルの関連づけ
- 埋め込みアセットクラスは「リンケージプロパティ」ダイアログの「基本クラス」のサブクラスとなる。埋め込みアセットクラスはその拡張機能をクラス定義ファイルに定義し両者を関連づけることで、定義されたプロパティやメソッドを持つデータとなる。
- ドキュメントクラス
- SWFファイルもMovieClipクラスのサブクラスとしてクラス定義ファイルに関連づけできる。
速習Webデザイン ActionScript3.0を読む その10
![速習Webデザイン ActionScript 3.0 速習Webデザイン ActionScript 3.0](https://images-fe.ssl-images-amazon.com/images/I/51siTwBEaxL._SL160_.jpg)
- 作者: 林拓也
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/13
- メディア: 大型本
- 購入: 7人 クリック: 137回
- この商品を含むブログ (13件) を見る
part8 ビデオ/サウンド
-
- キタ━━━(゚∀゚)━━━ !!
- 01-01
- サウンド再生はSoundクラス、停止と音量の調整はSoundChannelクラス、音量に関する調整はSoundTranceformクラスを使う。
- もうこのあたり慣れました。クラスの生成とプロパティの割り付けなど!
- Sound.play()メソッドを実行すると、Soundオブジェクトに関連づけられたサウンドがサウンドチャンネルに割り当てられ再生を開始する、と、なんとなく分かったような分からんようないつもの感じ。
- つまりSound.play()メソッドはサウンドの再生に割り当てたサウンドチャンネルをSoundChannelオブジェクトに返す、と。
- RPG風に解釈するとモンスター(サウンド)を召還する人と、操作する人が別になってるイメージ?
- 01-02
- 01-03 外部MP3ファイルのコントロール
- ここ一番実用的かな。課題にも出そうな感じ。
- Soundオブジェクト作成時にダウンロード。書式は以下。
var 変数:Sound = new Sound(URLRequestオブジェクト);
引数指定しないやり方
var 変数:Sound = new Sound();
変数.load(URLRequestオブジェクト);
var sndCh:SoundChannel;
var snd:Sound = new Music;
var posi:Number = 0;play_btn.addEventListener(MouseEvent.CLICK, xPlayClick);
stop_btn.addEventListener(MouseEvent.CLICK, xStopClick);
pause_btn.addEventListener(MouseEvent.CLICK, xPauseClick);
function xPlayClick(evt:Event):void{
if(sndCh==null){
sndCh = snd.play(posi,1000);
}
}function xStopClick(evt:Event):void{
if(sndCh != null){
sndCh.stop();
posi = 0;
sndCh = null;
}
}function xPauseClick(evt:Event):void{
if(sndCh != null){
posi = sndCh.position;
sndCh.stop();
sndCh = null;
}
}try_08-01_01.fla
-
- 始めに再生と停止ボタンだけ実装して動作確認してからヒントを参考にポーズボタンも実装。
- 最初ポーズの方に「sndCh = null;」やり忘れてて、ポーズボタンを押したら再生が行われない状態になってた。
- そこに気付いたらちゃんと動きました。
- そういえばCS4になってサウンド周りが変更されたのか、アセットクラスに設定する画面がテキストと違ってた。
*1:ストリーミング再生と似てるけどちょい違うらしい
速習Webデザイン ActionScript3.0を読む その9
![速習Webデザイン ActionScript 3.0 速習Webデザイン ActionScript 3.0](https://images-fe.ssl-images-amazon.com/images/I/51siTwBEaxL._SL160_.jpg)
- 作者: 林拓也
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/13
- メディア: 大型本
- 購入: 7人 クリック: 137回
- この商品を含むブログ (13件) を見る
part7 外部ファイルの読み込み のつづき
- 02-01 XMLファイルの読み込み
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE,xComplete);
xmlLoader.load(new URLRequest("sample.xml") );
function xComplete(evt:Event):void{
trace(xmlLoader.data);
}p191
for each(変数 in XMLListオブジェクト)[(条件)]{
処理
}
- 「(条件)」で条件抽出も可能
- 02-04
- Let's TRY!!
var blogXml:URLLoader = new URLLoader();
blogXml.addEventListener(Event.COMPLETE, xComplete);
blogXml.load(new URLRequest("try.xml"));
function xComplete(evt:Event):void{
var tempXml:XML = new XML(blogXml.data);
var subNode:XMLList =tempXml.diary;
subject_txt.text = subNode[0].@subject;
date_txt.text = subNode[0].@date;
content_txt.text = subNode[0].toString();
}try_07-02_00.fla
-
- 最後の行を「content_txt.text = subNode[0].diary.toString();」としてて本文だけ書き出されなかったけど、よく考えたらtempXmlにはdiaryタグまんまが代入されているので「.diary」は必要ありませんね。
- 属性値には必要なく、ノードの値には「toString」が必要というのが忘れちゃいそう。
- この課題のページ(p200)には2カ所も誤植が!!!!