2011年2月28日月曜日

2/28覚書

1時間目
☆クラス復習。

クラスの内容と実行ファイルを分けましょう。
includeさせるほうが一般的だし管理も楽。

ファイル名はHuman classなら、最初を大文字にしてHuman.class.phpとなる。

set_ini関数
ini_set()
レンタルサーバーで直接php.iniを触れないときに利用する。
いいんちょ曰く、この説明はいっちーが話していたそうな。
すまん覚えてない。

Notice: Undefinedとは、
未定義変数の場合の警告。エラーではないがあるとよろしくない。
デバッグ時にphp.iniの
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATEDを
error_reporting = E_ALL
; & ~E_NOTICE & ~E_DEPRECATED
に変更。;にするとコメントアウトする。

よろしくない理由はエラーが残っているとHTML以外のデータファイルの場所がわかり、
ハッキングなどの攻撃を受ける恐れがあり、防ぐための対処である。

授業の疑問。べたな書き方言うけどそこから勉強するんじゃねえの?

クラス継承
extendsというコードで継承させる。

目覚まし時計の行動を例に。
Tokei.class.php
MezamashiTokei.class.php
call_mezamashi_class.php

上記ファイル名で3つ作成。
call_mezamashi_class.phpをブラウザで出してみよう。

Tokei.class.php

<?php
class Tokei {
 function getTime(){
  return date('H:i:s');
 }
}
?>

MezamashiTokei.class.php

<?php
require_once('./class/Tokei.class.php');

class MezamashiTokei extends Tokei {

 function getTime(){
  return date('H時i分です');
 }

 function getBell(){
  return "リンリンリン!";
 }

}
?>

call_mezamashi_class.php

<?php
require_once('./class/MezamashiTokei.class.php');

$mezamashi = new MezamashiTokei();
print $mezamashi->getTime()."<br>";
print $mezamashi->getBell();

?>

Tokei.class.phpのgetTime()が、
MezamashiTokei.class.phpのgetTime()に上書きされている。
実際にMezamashiTokei.class.phpの下記部分を/*~*/で囲うとわかるよ。
function getTime(){
return date('H時i分です');
}

関数の上書きをオーバーライブというそうな。

privateとpublic
アクセス件の一種。何も書かなければpublicとして扱われる。
※基本Functionの前にprivate置くことはありません。class内の宣言とは違います。

ここから引用。
PHP5のアクセス制御にprivate、protected、publicがあります。
それぞれの違いを明記しておきます。
private そのクラスからしかアクセスできない
protected そのクラスと、サブクラスからしかアクセスできない
public どこからでもアクセスできる

ごめん。privateとpublicをつけてやるの聞いてなかった。
あれはアクセス権を理解するための処理にしかすぎない、と思ってしまいますた。
つうか同時に存在するクラスってその時点でクラス分けるべきだとおもうのだ。

Javaでの参考情報。とほほのWWW入門から修飾子
ていうかクラス図ってまたJavaですか。
UMLの概念を常に持ってほしいってことですね。
自分も忘れかけてたので再度紹介。
astah* community無償のUMLモデリングツール。せっきー紹介。
まあ、初日ですから。