豆豆

改行

Unix系OS: "\n" - ラインフィード(LF - ASCIIの10)
Mac : "\r~ - キャリッジリターン(CR - ASCIIの13)
Win : "\r\n" - CR+LF

PHP5では各OSディフォルトの改行コードを定義したPHP_EOL定数も容易されている。しかしPHP_EOL定数はスクリプトの記述に利用されている改行コードに関係なく定義されるので出力結果の改行コードの統一性がなくなる場合もあり

オブジェクト指向 研修

【Step1】 理解してください

値渡しと参照渡しの違い(pass-by-value VS pass-by-reference)とは?

値渡しの場合は値のコピーが渡され、参照渡しの場合は値のアドレスが渡される
関数に渡した時点では、どちらもアドレスが渡されている
・実行速度に差はない
違ってくるのはその値が変更される時
・値渡しの場合: 関数内で変更された値が関数内のローカル変数にコピーされる
・値を変更しない関数ならば、値渡しと参照渡しの差ない
参照渡しの方法は引数に&を付けるので、元々のarrayにも影響する

クラスとオブジェクト(インスタンス)の違いとは?

Objectを存在する前にObjectを認識する存在がある
考える人 --> 考えられる対象(object)
考える人によってObjectそのものは同じでも、見方や考え方が変わってくる Objectは物理的な物と概念的な物がある
Objectは外部からのメッセージをinterfaceのみで受け付ける。そこからのメッセージを受けて、立ち振るまい(動く)。

Objectが「固有の状態」「立ち振るまい」をカブセル化して隠蔽している

外部からはObjectの状態やどのようにして動くのか分からない。返って来るメッセージによってObjectが持っている固有な情報を取得する事が出来る

Objectになる要素

  1. 属性(attribute) -> 固有の姿、形、性質などの状態について表現される
  2. 操作(operation) -> どのように動くか、固有の立ち振るまい
  3. 関係 -> Object間との関連性
  4. アイデンティティ -> 個として認識出来る物

Objectになれない物
sがつける事が出来ない物

Objectの属性と関係を合わせてプロパティと呼ぶ [人]--[所有車(XX)]
[人 - 所有車(XX) ]

クラス

同じ特性を持つObjectの集合に*名前をつけた物* -> Objectではなく*特性*がメイン 集合

外延(extension) -> Objectの集合
[人][人][人][人]
内包(intension) => Object抽象概念
[社員]

intensionは大枠でextensionは具体的に表現されたobject

インスタンス(instance)

= クラスに属する*Object*
クラスをオブジェクトの集合とするなら、集合の要素がインスタンス

[object :)][object :)][object :)] -> [class - object]
-> [class :)]

クラスは分類出来る

	クラスA(スーパークラス)--> サブクラスB(分類された物)
	is-a関係 A is a B
	サブクラスは部分集合	 車 <= バス 車<=トラック

Object --> 部品がObjectになる場合 複合Objectになる

  1. プロパティとは?
  2. メソッドとは? あるクラスに所属するサブルーチンを指す。
  3. オブジェクト指向の3原則とは?
    1. カプセル化(encapsulation)とは? Objectが「固有の状態」「立ち振るまい」をカブセル化して隠蔽している
      外部からはObjectの状態やどのようにして動くのか分からない。返って来るメッセージによってObjectが持っている固有な情報を取得する事が出来る
    2. 継承(inheritance)とは? あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。 通常関係については一度関係が定まると変更されない
    3. ポリモーフィズム(polymorphism)とは? Polymorphism -> 同じ名前の操作が多くの形を取る、異なる振る舞いをする。 クラスなどで分類された特性別で同じ文言でも違う意味を持つ事
  4. 委譲(delegation)とは?
    あるオブジェクトの操作を一部他のオブジェクトに代替わりさせる手法 ※委譲を引き受けるオブジェクトはどのような操作を実装しなければならないか知っている必要があるため、インタフェースと併用される場合が多い。

【Step2】 覚えてください

  1. PHPでオブジェクトを使用するときのシンタックスを勉強してください。

    # interface、abstract、static は無視してOKです。

【Step3】 ハンズオン

私と一緒に簡単なサンプルプログラムをかき、その後もう少し難しいサンプルプ ログラムを作成してもらいます。

【Step4】 UML

to be announced

http://ja.wikipedia.org/wiki/JIS_X_0401

Day7

  • Final Projectの仕様とDBを仮決めする

Day6

便利コマンド

  • use: データベースを選択(切替)する(use bem;)
  • $ mysql -u [user] -p[password] [database name] < hoge.sql : SQL文を記述した外部ファイルを直接実行するには、下記のようにコマンド実行します。

前回

  • enum('y','o', 's');
  • 条件?yes; no;

Day5

  • ER図 w/ Smartdraw
    • user [done]
      • 1対1結合: 一つに対して一つ(一人の夫に対して一人の妻)
      • 多対1結合: 一つに対して複数(一人の先生に対して複数の生徒)
        例:一人の生徒は一人の先生しかいないが、一人の先生は複数の生徒を持っている
      • 選択: [1]-●-[エンティティ]-●-[2]
        あるエンティティに対して、関連する複数のエンティティ「それぞれ」で、対応関係があるかもしれないし、ないかもしれない時、これらは「選択」の関係にあるという。「選択」は「相互排他」や「相互包括」と違って、関連する(かもしれない)複数のエンティティそれぞれの関係は独立している(つまり相互には関係がない)。(1)片方だけ関係があるかもしれない、(2)両方関係があるかもしれない、(3)両方関係がないかもしれない。
      • 相互排他:[エンティティ]-●-[1]--[2](うまくアスキーアートで描けない)
        あるエンティティに関して、関連する複数のエンティティのうち、どれか一つに対応関係を持ち、その他のエンティティには対応関係が無い。つまり、たった一つのエンティティにのみ関係を持つ。逆を返せば両方関係を持たないと宣言している
      • 相互包括:[エンティティ]-○-[1]--[2](うまくアスキーアートで描けない)
        あるエンティティに関して、関連する複数のエンティティのうち、どれか一つに対応関係を持てば、その他のエンティティすべてにも対応関係がある。つまり、対応関係はオールorナッシングになる。
  • ER図を元にtable作成、ダミーデータ入れる[◆]
  • poll [done]
  • databaseのデータ型[done]
    • int系
      INT:INTEGER // DEC:DECIMAL
      INT カラムが UNSIGNEDの場合、このカラムの範囲のサイズは同じ、、最小値と最大値はそれぞれ 0 と 4294967295となる
      ALTER TABLE、LOAD DATA INFILE、UPDATE、および複数行の INSERT ステートメントでは、切り落としによる値の変換は ``警告'' として報告される
バイト最小値最大値
TINYINT1-128127
SMALLINT2-3276832767
MEDIUMINT3-83886088388607
INT4-21474836482147483647
BIGINT8-92233720368547758089223372036854775807
  • text
    • BLOB型:可変長のデータを格納できる、大きなバイナリオブジェクト
      TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOBの違いは格納可能な値の最大長のみが違う
    • TEXT 型 INYTEXT、TEXT、MEDIUMTEXT、LONGTEXT は最大長と記憶容量がそれぞれの BLOB 型と同じ
    • TEXT/BLOB型の違い:ソートと比較が違う。TEXT->大文字・小文字の区別をしない BLOB->大文字・小文字の区別をする
      そのカラム型の最大長を超える値を割り当てると、カラムのサイズに合わせて値が切り捨て
      ○TEXT型=任意の長さに設定できる VARCHAR 型のカラム
      ○BLOB型=VARCHAR BINARY 型のカラム
      BLOB 型と TEXT 型のカラムには、インデックス付け可
      値の格納時に後続のスペースはBLOB 型と TEXT 型のカラムではこの削除は行われない
      BLOB 型または TEXT 型オブジェクトの最大サイズは、その型によって決まるが、クライアントとサーバ間で実際に送信できる最大値は使用可能なメモリ量と通信バッファのサイズで決まる。メッセージバッファのサイズ(max_allowed_packet)は変更できるが、サーバ側とクライアント側の両方で変更を行う必要がある。
  • varchar vs char
    • char:CHAR 型のカラムの長さは、テーブルの作成時に宣言した長さ(1 〜 255 の任意の値を指定可能)に固定 
      CHAR 型の値は、格納時に、指定された長さになるよう右側にスペースが挿入。
      CHAR 値の取り出し時には、後続のスペースが削除される
    • varchar:VARCHAR 型のカラムの値は可変長の文字列
      VARCHAR カラムは、CHAR カラム同様、1 〜 255 の間の任意の長さとして宣言可能
      必要な文字と、長さを記録するための+1バイトのみで格納される
      値の格納時、後続のスペースは削除される
      CHAR/VARCHAR型カラムに、そのカラムの最大長を超える値を割り当てると、カラムのサイズに合わせて値が切り捨てられる
    • 暗黙的な決まり(ひー)
      長さが 4 文字に満たない VARCHAR 型のカラムは CHAR 型に変更される。
      テーブルのいずれかのカラムが可変長である場合は、結果的にそのレコード全体が可変長になる。
      テーブルに可変長のカラム(VARCHAR、TEXT、BLOB)が含まれている場合、長さが 3 文字を超す CHAR 型のカラムはいずれも VARCHAR 型カラムに変更される。
      VARCHAR 型は単に文字を格納するもう 1 つの手段として使用されている。
      この変換が実行される理由は、スペースを節約し、テーブル処理を迅速化するためである。
  • ENUM: ENUM 型は、テーブルの作成時にカラムの仕様で明示的に列挙された使用可能な値のリストから、通常、値が選択される文字列オブジェクト
    ENUM 型が NULL として宣言されている場合、そのカラムでは NULLも正しい値=デフォルト値も
    NULL。ENUM 型が NOT NULL として宣言されている場合は、使用可能な値の最初の要素がデフォルト値として使用される。
    不正な値(選択不可の値)を ENUM型のカラムに挿入すると、特殊なエラー値として、空の文字列(数値 0)が挿入される。
    NULL 値のインデックスは NULL
    値 ->インデックス:NULL->NULL/"" ->0/"one"->1/"two"->2/"three"->3 列挙には、最大 65535 個の要素を 組み込み可
    ENUM型のカラムに値を割り当てる際には、大文字と小文字の区別なし
    ENUM 型に数値を格納=その数値はインデックス扱い、なのでまぎらわしいので、ENUM 型の文字列には数値を含めないようにする
  • auto_increament

Day4

  • clean up & validationを一緒にしてみる($_POST['poll_selected']  [done?]
  • if のexpression、 一行で、poll_selectedに値をいれおく(checked) [done]
  • poll: user -> DB ER図を作る
  • ログイン履歴を入れておく
  • ER図を作る(何かで)

Day3

  • コメントをresultに追加[done]、またコメントを投票一覧の下に表示[done]
  • foreachを??文字化けして読めず・・・[x]
  • headerで次のページへ飛ばす(thankページ)[done]
  • string/dateを追加[done]
  • unix timestamp -> time()[check]
    追加する時間単位の確認、どんな順番?
  • check PDO[check]
    プログラム->PDO->databases
    プログラム自体は別のデータベースを同じコマンドで使うことができる
  • session/DB
  • コメントの入力をチェック(htmlentitiesがうまくいかない。php.iniか?)[x]
  • mysql[x] 5.0.x
    ダウンロード場所が見つからない。バージョンも確認すること

Day2

  • arrayを読む
  1. array_count_values
  2. array_map
  • 管理画面をどうするか

Day1

  • trim/file_get_contents/file
  • _SERVER['PHP_SELF']/_SELF/array key/quoteKv/array_key_exists
  1. errorを出さない

Last-modified: 2012-03-12 (月) 17:05:13 (166d)