cakePHP + smarty + 絵文字表示
とりあえず表示だけ。
入力、保存、出力はまたあとで。
携帯絵文字変換スクリプト様++
便利なものを作成してくださっている。
携帯絵文字変換スクリプトをPHPで作ってみた。 携帯サイトを作ろう! -ちょっと詳しいモバイルサイトの作り方-
最新版はこっちにあるらしい
携帯絵文字変換スクリプト 3キャリア対応版 - HTMLタグボード
ダウンロードは最新版から落とそう。
Smartyで携帯絵文字カスタム関数様++
別にそういう名前の関数ではないのだけど、なんて呼んでいいのかわからないので、こうやって呼びました。
Smarty で携帯絵文字 - ZeBeVogue別館
簡単に言うと、
{emoji num="120"}
とか書くだけで、3キャリア対応絵文字が出るようになります。
素敵。
レンタルサーバでcakePHPとsmartyで開発環境作るまでのメモ
もともと
cake使ってみたい => サイト作るか
という不純(?)な動機でスタート。
さくらVPS借りようかと思ったけど、FTPでもいけっかな、って思って、とりあえず今あるレンタルサーバで作って見ることに。
どうせVPSは遅かれ早かれいつか使うだろうし。
download
CakePHP: 高速開発 php フレームワーク。 Home
ここからstableののバージョン落としてきた。
申し訳ないけど、寄付はせず普通に落とす。
解答して、FTPで全部あげる。
とりあえずこれで、ページは見えるようになる
mod_write
もし、見える画面内に、緑色や黄色がなければ、それは、mod_writeが有効になってないです。
もしくは、.htaccess の記述方法が違うかな。
特に、何か適当なディレクトリにcakeを解凍してupした場合、base url の追加が必要かも。
404 Not Found
The requested URL /Users/yuichi/Sites/cake_tutorial/app/webroot/ was not found on this server.
とかって出てしまう場合は以下の修正を加えると巧くいきます。
諸設定
セキュリティ的によくなかったり、オールグリーンになっていなかったりするところを変えていく
webから開いてみると、エラーメッセージが何個かでているのでつぶしていく
Notice (1024): Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application [CORE\cake\libs\debugger.php, line 548
5月 2010 | すぐに忘れる脳みそのためのメモ
これらのサイトを参考にする
'Security.salt'がデフォルトのままよ。ってエラーかな。
/app/config/core.php の
Configure::write('Security.salt', 'hogehogehoge'); // hogehogehogeの部分を適当に変える
次
Notice (1024): Please change the value of 'Security.cipherSeed' in app/config/core.php to a numeric (digits only) seed value specific to your application [CORE/cake/libs/debugger.php, line 688]
同じくデフォルト値変えればいい
/app/config/core.php の
Configure::write('Security.cipherSeed', '1234567890'); //1234567890を適当に
次
Your database configuration file is NOT present. Rename config/database.php.default to config/database.php
database設定書いてないから
書きましょう。
app/config/database.php.default
上記ファイルをコピーして、
app/config/database.php
を作りましょう。
次
キャッシュしてくれたりするので、そのディレクトリを書き込み権限に変えてあげる。
app/tmp/cache/ models/ * persistent/ * views/ * sessions/ * logs/ * tests/ *
印をつけたディレクトリに書き込み権限をあげる
smarty
smarty 使いたいから、使ってみる
第11回 Smartyとフレームワーク(その1:CakePHP編) - Smarty講座
ここ参考に
smartyは
Download | Smarty
ここらdownload
stableを選ぶ
SmartyViewクラスは、1.0.0.7が最新版。
最新版だと、
第11回 Smartyとフレームワーク(その1:CakePHP編) - Smarty講座
ここで指摘されているような修正はしなくても、すでにコードが修正済みになってた。
ここのサイト様の言うとおりにすれば特につまらなかったから、まぁ次もこのサイトみよ
simple_test のススメ
phpでテストscript書こうと思って、せっかくなんでちゃんと世間的に有名な書き方に慣れておこうと思った。
なので、まずはphpでよく使われるtest codeを探す
SimpleTest
なんかSimple Testが有名らしい。
symfonyのUnitTestにも使われているらしいし、CakePHPでも使ってる人いた。
今回のtest codeはシンプルだし、使いやすそうなこいつを使う事にする。
install
基本は、落として、解凍して、適当なdir置くだけ。
本家
SimpleTest - Unit Testing for PHP
落として
SimpleTest - Unit Testing for PHP
使い方
読み込みましょう。
require_once 'simpletest/unit_tester.php'; require_once 'simpletest/reporter.php';
// UnitTestCase を継承して // 適当にわかりやすいクラス名で class TestHoge extends UnitTestCase { // php のversionに合わせて、コンストラクタの呼び方は適当に変えて public function __construct() { $this->UnitTestCase(); } // test という文字列で始まるテストコードを書く public function testSample() { // ここにテストを書く } } $test = new TestHoge; $test->run(new TextReporter());
な感じで使う。
ある程度ひな形。
内部のメソッドは複数書いてOK。
なんか、test*****を勝手に探して、勝手に実行してくれる。
便利。
んで、テストコードの書き方だけど、
$this->assertTrue($hoge);
とか、
$this->assertEqual($first, $second);
とか、色々なメソッドがある。
全部書くと大変だから、ちょっとだけまとめると、
- assertTrue($x)
- Fail if $x is false : $xが偽でエラー
- assertFalse($x)
- Fail if $x is true : $xが真でエラー
- assertNull($x)
- Fail if $x is set : $xがNULLでエラー
- assertNotNull($x)
- Fail if $x not set : $xがNULLじゃなければエラー
- assertIsA($x, $t)
- Fail if $x is not the class or type $t : $xオブジェクトが$tタイプじゃなかったらエラー
- assertNotA($x, $t)
- Fail if $x is of the class or type $t : $xオブジェクトが$tタイプだったらエラー
- assertEqual($x, $y)
- Fail if $x == $y is false : $xと$yが等しくなければエラー
- assertNotEqual($x, $y)
- Fail if $x == $y is true : $xと$yが等しければエラー
他にもあるけど、あまり使わないかな。
原文だけのせておく。
assertWithinMargin($x, $y, $m) Fail if abs($x - $y) < $m is false assertOutsideMargin($x, $y, $m) Fail if abs($x - $y) < $m is true assertIdentical($x, $y) Fail if $x == $y is false or a type mismatch assertNotIdentical($x, $y) Fail if $x == $y is true and types match assertReference($x, $y) Fail unless $x and $y are the same variable assertClone($x, $y) Fail unless $x and $y are identical copies assertPattern($p, $x) Fail unless the regex $p matches $x assertNoPattern($p, $x) Fail if the regex $p matches $x expectError($x) Swallows any upcoming matching error assert($e) Fail on failed expectation object $e
ちなみにレポートの吐き出し方は、TEXTとHTMLがあるようで、
$test->run(new HtmlReporter());
こんなのも行ける。
ちなみに使った事ないので、どうなるかしらないw
きっと、HTML吐き出して、エラーとか見やすいんだと思う。
phpにおける継承、抽象化、ポリモーフィズム再確認してみた
phpを使うようになって、perlの頃よりoopを意識するようになった。
せっかくなので今まで曖昧だったoopについて、再確認の意味も込めて書いてみる。
とりあえず書いてみましょう。
初心者なので、つっこみ大歓迎
ピアノを作ってみる
1 <?php 2 3 class Piano { 4 private $name = 'piano'; 5 public function play() { 6 echo "ドレミ"; 7 } 8 } 9 10 $piano = new Piano(); 11 $piano->play(); 12 13 ?>
ピアノクラスを作って見ました。
さて、ここで、ギターも買ったとします。
すると、ピアノクラスとギタークラスで、playという同じメソッドができることになるでしょう。
これはちょいと無駄です。
なわけで、楽器クラスを作り、その楽器クラスを継承してplayというメソッドを使いましょう
継承
1 <?php 2 3 class Gakki { 4 private $area= "music"; 5 public function play() { 6 echo "ドレミ\n"; 7 } 8 } 9 10 class Piano extends Gakki { 11 private $name = "piano"; 12 } 13 14 class Guitar extends Gakki { 15 private $name = "guitar"; 16 } 17 18 $piano = new Piano(); 19 echo "piano : "; 20 $piano->play(); 21 22 $guitar = new Guitar(); 23 echo "guitar : "; 24 $guitar->play(); 25 26 ?>
Gakkiクラスを作って、それを継承してみました。
ところがこのままだと、ピアノもギターも同じ音色です。
こーいつは困った。
というわけで、ピアノを弾いた場合は、「ピアノでドレミ」と出すようにしましょう。
オーバーライド
1 <?php 2 3 class Gakki { 4 private $area= "music"; 5 public function play() { 6 echo "ドレミ\n"; 7 } 8 } 9 10 class Piano extends Gakki { 11 private $name = "piano"; 12 public function play() { 13 echo "ピアノでドレミ\n"; 14 } 15 } 16 17 class Guitar extends Gakki { 18 private $name = "guitar"; 19 } 20 21 $piano = new Piano(); 22 echo "piano : "; 23 $piano->play(); 24 25 $guitar = new Guitar(); 26 echo "guitar : "; 27 $guitar->play(); 28
このように継承元と同じメソッド名でメソッドを定義し、新たに別の機能を与えることを、オーバーライド。
んでもって、もしオーバーライドされたくなければ、final修飾詞を付ける。
final修飾詞を付ければ、不用意にオーバーライドされることを防げます。
では、ギターを弾いた場合も、「ギターでドレミ」とでるようにしましょう。
しかし、これでは、ピアノもギターもplayメソッドを持ち、楽器クラスでplayを定義する意味がないです。
ただ、今後も楽器が増えることを考えると、「楽器は演奏するもの」という定義は残しておきたい。
こういうときには抽象メソッドという考えを使いましょう。
abstract修飾詞をメソッドの前につけます。
また、抽象メソッドを含むクラスを、抽象クラスと呼ぶようです。
抽象 (abstract)
抽象化メソッドは中身はありません。
ただし、継承元で抽象化メソッドを定義すると、継承先メソッドで必ずそのメソッドがオーバーライドされることを強要します。
サブクラスでオーバーライドされないかぎり、インスタンス化できません
1 <?php 2 3 abstract class Gakki { 4 private $area= "music"; 5 protected abstract function play(); 6 } 7 8 class Piano extends Gakki { 9 private $name = "piano"; 10 public function play() { 11 echo "ピアノでドレミ\n"; 12 } 13 } 14 15 class Guitar extends Gakki { 16 private $name = "guitar"; 17 public function play() { 18 echo "ギターでドレミ\n"; 19 } 20 } 21 22 $piano = new Piano(); 23 echo "piano : "; 24 $piano->play(); 25 26 $guitar = new Guitar(); 27 echo "guitar : "; 28 $guitar->play(); 29 30 ?>
ポリモーフィズム
実は、なんとなくポリモーフィズムというものができちゃってます。
昨今は、ポリリズムのほうが有名ですが、
Java初心者です。ポリモーフィズムがよく分かりません。ポリリズムとどう違うんですか?|質問・相談が会員登録不要のQ&AサイトSooda!(ソーダ)
一体ポリモーフィズムとはなんざんしょ。
ポリモーフィズムあるいはポリモルフィズム(Polymorphism)とは、プログラミング言語の型システムの性質を表すもので、プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。多態性、多相性、多様性とも呼ばれる。対義語はモノモーフィズム(Monomorphism)、単態性、単相性で、プログラミング言語の各要素が唯一つの型に属するという性質を指す。
わかんねぇ・・。
もう少し噛砕きましょう。
ポリモーフィズムとは同名のメソッドが異なる挙動を示すことを表します。
こちらのサイト様が非常に分かりやすい。
独学PHP はじめよう、PHPでオブジェクト指向
ポリモーフィズムとは同名のメソッドで異なる挙動を実現することをいいます。ポリモーフィズムのメソッドは、同じ目的の機能に同名のメソッドを割り当てることができるということです。これは一連の関連するクラスを利用する場合に、異なるメソッド名を覚えなくていいため、利用者にとって利便性が増します。実装には、単なる継承とオーバーライドだけではそれぞれのサブクラスが同名のメソッドを持つことが必ずしも保証できないため、抽象メソッドという概念をPHPの場合利用します。
つまり、「楽器」には全て「演奏」という機能を「同名メソッド」で与えたい。
それには、「継承」と「オーバーライド」だ。
でも、それだとサブクラスが勝手に、「演奏」以外の独自名でメソッド作っちゃうかも。
それにはphpだと、抽象化が便利だ。
あれ?
これポリモーフィズムじゃね?
ってなわけです。
でも、これにはさらに一個問題を含んでいるらしいです。
それは、phpは多重継承ができないんので、サブクラスが同時に複数のスーパークラスを持てません。
つまり、ポリモーフィズムを実現したいすべてのメソッドを抽象クラスに持たせることに。
サブクラスがスーパークラスの機能を必要としない場合も、オーバーライドしないといけません。。。
わお。冗長。
例えるならなんだろう。
「演奏」の他に、打楽器用の「たたく」と、吹奏楽器用の「吹く」と、指揮用の「ふる」と、歌用の「歌う」メソッドが、すべての楽器サブクラスにあるようなもの?
そんなときに使うのが、interface
interface
インターフェイスとは配下のメソッドがすべて抽象メソッドである特別なクラスを言います
だそうですが、今日は眠いのでまた今度書く
素晴らしく参考にさせていただいたサイト
auの新しい機種で、li要素間にdiv要素が含まれると表示がくずれるらしい
li間に行間を持たせたくて、
<li>ほげ</li> <div><img src="s.gif" width="1" height="5" /></div> <li>ふが</li> <div><img src="s.gif" width="1" height="5" /></div> <li>ばー</li> <div><img src="s.gif" width="1" height="5" /></div>
こんなことした場合
昔のauの機種だとうまいこと、1,2,3 と番号が勝手にふられてくれたが、最近の携帯じゃ無理っぽい。
ま。メモ的に。