PHPãæãã試ã¿
åã¯Rubyã好ãã ããã©ã¤ãã¼ãã§ã¯Rubyã°ã£ãã使ã£ã¦ãããã§ããä»äºã§ã¯PHPã使ããªããã°ãªããªããããã¾ã§PHPã¯æ¸ãã«ããã¼ã¨æãè¾¼ãã§ãã¦ãã¾ã好ãã§ã¯ãªãã£ãã®ã ãã©ãä»äºã§ä½¿ã以ä¸PHPã好ãã«ãªã£ãæ¹ããã£ã¨å¹¸ãã«ãªãããä½ãã好ãã«ãªãã«ã¯ã©ãããã°ãããããããç¸æã®ãã¨ãç¥ãåªåãããã°ãããã ï¼ã¨ãããã¨ã§ãPHPã«ã¤ãã¦ç¥ãåªåããã¦ã¿ãã
ããã¯...
PHP好ãã«ãªããããï¼
æ®æ®µRubyã§æ¸ãã¦ãã³ã¼ããPHPã§æ¸ãã¦ã¿ã
æè§ãªã®ã§èªåãæ®æ®µRubyã使ã£ã¦ãã¦ä¾¿å©ã ãªã¼ã¨æãã¦ãããã¨ãPHPã§ã¯ã©ãæ¸ãã®ãï¼å³å¯ã§ã¯ç¡ãã«ãã¦ã大ä½åãå 容ã¯ã©ãæ¸ããï¼è©¦ãã¦ã¿ããRubyã¯1.9.2ãPHPã¯5.3.10ã
å¤éä»£å ¥ã£ã½ããã®
a, b = [1, 2] puts a puts b
<?php list($a, $b) = array(1, 2); echo "$a\n"; echo "$b\n";
ã»ãï¼
å¯å¤é·å¼æ°
def foo(*args) p args end foo 1, 2 foo 1, 2, 3
<?php function foo() { var_dump(func_get_args()); } foo(1, 2); foo(1, 2, 3);
ã»ã»ãï¼
ç¡åé¢æ°ã»ã¯ãã¼ã¸ã£
a = [1, 2, 3] b = 10 r = a.map {|v| v * b} p r
<?php $a = array(1, 2, 3); $b = 10; $r = array_map(function($v) use ($b) {return $v * $b;}, $a); var_dump($r);
åå空é
module A class C def self.foo; puts 'A_foo'; end end end module B class C def self.foo; puts 'B_foo'; end end end A::C.foo B::C.foo
<?php namespace A{ class C { static function foo() {echo "A_foo\n";} } } namespace B{ class C { static function foo() {echo "B_foo\n";} } } namespace { \A\C::foo(); \B\C::foo(); }
ãã¢ãï¼ãã©ããã£ã¨æ £ããï¼
å¼ã³åºãå ãä¸è¦§è¡¨ç¤º
def foo1; foo2; end def foo2; foo3; end def foo3; puts caller; end foo1
<?php function foo1() {foo2();} function foo2() {foo3();} function foo3() {debug_print_backtrace();} foo1();
ããã§ãããã ï¼
ãªãã¸ã§ã¯ãã®æ å ±ããããã表示
class C; def foo1; end end class CC < C; def foo2; end end class CCC < CC; def foo3; end end ccc = CCC.new puts ccc.class.ancestors puts ccc.methods
<?php class C { function foo1() {} } class CC extends C { function foo2() {} } class CCC extends CC { function foo3() {} } $ccc = new CCC(); var_dump(get_class($ccc)); var_dump(class_parents($ccc)); var_dump(get_class_methods($ccc)); //ããã«ReflectionObject::exportã使ãã¨ãã¡ã½ããã®å®ç¾©å ´æãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¾ã§è¡¨ç¤ºãã¦ããã ReflectionObject::export($ccc);
ã½ã¼ã¹ã³ã¼ãèªãã¨ãå©ããï¼
ã¡ã½ãããã§ã¤ã³
class C def foo1; self; end def foo2; self; end def foo3; puts 'done'; end end C.new.foo1.foo2.foo3
<?php class C { function foo1() {return $this;} function foo2() {return $this;} function foo3() {echo 'done';} } $c = new C(); $c->foo1()->foo2()->foo3();
æµãã¦ã...
ã¡ã¿ããã°ã©ãã³ã°ï¼åçãªé¢æ°å®ç¾©ã¨å¼ã³åºãï¼
class C def method_missing(method_name, *args) puts method_name end end c = C.new [:foo1, :foo2].each {|m| c.__send__(m)}
<?php class C { function __call($method_name, $args) { echo "$method_name\n"; } } $c = new C(); foreach(array("foo1", "foo2") as $m) {$c->$m();}
ããã¤ã»ã»ã»åããï¼
ããã«PHP5.4ã«ããã¨
ã¹ã´ã¤ããã...
http://php.net/manual/ja/migration54.new-features.php
é
åã®ãªãã©ã«ã¨ãã¦[]ã使ãããããã«ãã¤ã³ãµã¼ãã使ããããããããã§ãã...
PHP
好ãã«ãªããããï¼ä»åº¦ã¯ãã¬ã¼ã ã¯ã¼ã¯ã¨ãã触ã£ã¦ã¿ããï¼
â»ã·ãªã¼ãºãã®ã§é å¼µã£ã¦ã
PHPを愛する試み
PHPを愛する試み 〜調教編〜
PHPを愛する試み 〜self:: parent:: static:: および遅延静的束縛〜