
1ã€ã®èšèªãäžæã«è©±ããèªåã§æ°ããèšèªãè©ŠããŠã¿ãéçºè
ããæ§æ¥ãªçµè«ãšæ¯èŒãè¡ãããšããããããŸãã éåžžããã®ãããªåºçç©ã¯ããªã圹ã«ç«ããªããããã£ãããŒãªèŠåºãã¯è¯ããã©ãã£ãã¯ãäžããŸãã
ç§ã¯ãäž¡æ¹ã®èšèªã奜ãã§ããããã®èšèªã䜿ã£ãçµéšãè±å¯ãªéçºè
ã®èŠ³ç¹ãããããæ£çŽãªæ¯èŒãè¡ãããšãã¯ããã«èå³æ·±ããšå€æããŸããã ããšãã°ãPHPãšRubyã䜿çšããŸãã ãããŠãããã§ã®ã¿ã¹ã¯ã¯ãã©ãããããè¯ããããèŠã€ããããšã§ã¯ãããŸããã Rubyãšãã®ãšã³ã·ã¹ãã ã§æ°ã«å
¥ã£ãŠããããããã£ã匷調ãããã ãã§ãã
æŠå¿µçãªéã
èšèªã®éãã¯ããã€ããªãã®ãŒçã§ãããæè¯ã®èšèªãéžæããããã«ãç°ãªãèšèªã¯ãã°ãã°äºãã«æ¯èŒãããŸãã èšèªã®ãŸã£ããåãç¹æ§ã¯ãäžéšã®éçºè
ã«ãšã£ãŠã¯æ©æµã§ãããä»ã®éçºè
ã«ãšã£ãŠã¯æªå€¢ã§ãã èŠç¹ã説æããåã«ãèšèªéã®åºæ¬çãªéãã«ã€ããŠèª¬æããå¿
èŠããããŸãã
ã¡ãœãããå€æ°ãããããã£ïŒ
PHPã¯ãRubyãšã¯ç°ãªããããããã£ãã¡ãœãããå€æ°ã«ã¢ã¯ã»ã¹ããããã«ç°ãªãæ§æã䜿çšããŸãã
Php$this->turtle
Pedantsã¯
attr_reader :turtle
ã
attr_reader :turtle
ã®ã²ãã¿ãŒãšããŠäœ¿çšãããã¡ãœãããåçã«å®çŸ©ããããšã«æ°ä»ãã§ãããã
@turtle
ã
turtle
ãš
bike
ã¯åããã®ã§ãã åæã«ãPHPéçºè
ã¯ã©ãããæ¥ãã®ãç解ã§ãããã¡ãœããåãŸãã¯å€æ°ãæ瀺çã«å®çŸ©ããã«
turtle
ã®äœ¿çšãæ€èšããŸãã
ããã«ããæ··ä¹±ãçããå ŽåããããŸãã ããšãã°ãããŒã ã¡ã€ãã¯
attr_reader
èŠçŽ ãå®å
šãªã¡ãœããã«ããŸãã¯ãã®éã«çœ®ãæããŠæ··ä¹±ãåŒãèµ·ãããŸãã éåžžã«æè»ãªAPIã䜿çšããå Žåãããã¯å®å
šã«åãå
¥ããããåãã§ãããéåžžã«å€§èãªã¹ããŒã ãå®è£
ã§ããããšãèšããªããã°ãªããŸããã
ãã£ãŒã«ããåé€ããŸããããJSONã³ã³ãã©ã¯ãã¯ãŸã ååšããŠãããšèããŠããŸããããŸã å€ãã®ã³ãŒããæ®ã£ãŠããŸããïŒ
class Trip def canceled_at nil end end
ããã¯æ£åžžã«æ©èœããŸããäœãã
trip.canceled_at
åŒã³åºããšããã£ãŒã«ãã§ã¯ãªã
nil
ãååŸãããŸãã åŸã§ãããæ£ããåé€ã§ããŸãã
ã¿ã€ããã³ããšã¢ãã«ã¿ã€ãã³ã°
PHPã®äžçã§ã¯ãåã®æ瀺ã¯å¥åŠã§çŽ æŽããããã®ã§ãã Goãªã©ã®èšèªã§ã¯ãåŒæ°ã®åãšæ»ãå€ã®åã®äž¡æ¹ãæå®ããå¿
èŠããããŸãã åŒæ°ã®ãªãã·ã§ã³ã®åæå®ã¯ã5çªç®ã®ããŒãžã§ã³ããPHPã«ç»å ŽããŸããã ãŸããæè¿åŒã³åºããããªããžã§ã¯ãã ãã§ãªããé
åãç¹å®ã®ã¯ã©ã¹åãã€ã³ã¿ãŒãã§ã€ã¹ããŸãã¯æœè±¡ãªããžã§ã¯ããèŠæ±ããããšãã§ããŸãã
PHP 7.0ã§ã¯ãæ»ãå€ã®åæ瀺ãããã³
int
ã
string
ã
float
ãªã©ã®ãã³ããµããŒãããããŸããã ããã«ã
ã¹ã«ã©ãŒåã®æ瀺ãå°å
¥ãããŸããã ãã®æ©èœã¯å€ãã®è«äºãšè°è«ãåŒãèµ·ãããŸããããçµæãšããŠå®è£
ãããŸããã ãã®äœ¿çšã¯ãããã°ã©ããŒèªèº«ã®å¥œã¿ã«å®å
šã«äŸåããŸããããã¯ãPHPãŠãŒã¶ãŒã®å€æ§æ§ã«ç
§ãããŠæå ±ã§ãã
Rubyã«ã¯ããã¯ãããŸããã
ããã¯ã¿ã€ãã³ã°ã¯ãPHPã³ãã¥ããã£ã®äžéšã«ãã£ãŠãµããŒããããŠããåªããã¢ãããŒãã§ãã ãåŒæ°ã¯
FooInterface
ãå®è£
ããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãªããã°ãªããªãããšè¿°ã¹ã代ããã«ã
FooInterface
ã
bar(int $a, array $b)
ã¡ãœãã
bar(int $a, array $b)
ãæã€ããšã«ãªããããã§ãªããã°ãåŒæ°ã¯äœã§ã
FooInterface
ãã
bar
ã¡ãœããã ãããŠã圌ãåå¿ããªããã°ãä»ã®äœããæãã€ããŸããã
ã«ã㌠def read_data(source) return source.read if source.respond_to?(:read) return File.read(source.to_str) if source.respond_to?(:to_str) raise ArgumentError end filename = "foo.txt" read_data(filename)
ããã¯æ¬åœã«æè»ãªã¢ãããŒãã§ããããã®ã³ãŒããæ°ã«å
¥ããªã人ãããŸãã ç¹ã«PHPã§ã¯ãweakã¢ãŒãã®
int(0)
ãš
int(1)
ãä»»æã®å€ãåãæ£ããããŒã«å€ãšèŠãªãããããããã¹ãŠãæ£åžžã«æ©èœããããšãæåŸ
ããã®ã¯éåžžã«å±éºã§ãã PHPã§ã¯ã2ã€ã®ç°ãªãã¡ãœãã/é¢æ°ãç°¡åã«å®çŸ©ã§ããŸãã
function read_from_filename(string $filename) { $file = new SplFileObject($filename, "r"); return read_from_object($file); } function read_from_object(SplFileObject $file) { return $file->fread($file->getSize()); } $filename = "foo.txt"; read_from_filename($filename); $file = new SplFileObject($filename, "r"); read_from_object($file);
èšãæããã°ãPHPã§ããã¯ã¿ã€ãã³ã°ãç°¡åã«äœ¿çšã§ããŸãã
function read_data($source) { if (method_exists($source, 'read')) { return $source->read(); } elseif (is_string($source)) { $file = new SplFileObject($source, "r")); return $file->fread($file->getSize()); } throw new InvalidArgumentException; } $filename = "foo.txt"; read_data($filename);
ããã¯ã¿ã€ãã³ã°ã䜿çšããå¯èœæ§ããããããRubyããããè¯ãããšããéåžžã«äžè¬çãªèª€è§£ã¯PHPã§ãã PHPã§ã¯ãäž¡æ¹ã®ã¢ãããŒãã䜿çšã§ããŸããã©ã¡ãããéžæããŠãã ããã ãããŠããã®PHPã¯ãæ¬åœã«ãããå Žåã§ããã¿ã€ããã³ãã䜿çšããæ¹æ³ããªãRubyãšæ¯èŒããŠæå©ã§ãã å€ãã®PHPããã°ã©ããŒã¯ãå®éã«ååç
§ãå«ãããããããŸã£ããé¿ããããšèããŠããŸãã ãããæ®å¿µãªããšã«ãPHP 7.0ã«ã¯ããã«å€ãã®ã¿ã€ããã³ãããããŸãã
ãšããã§ãPythonã®åã«ã¯åãã£ã¬ã¯ãã£ãããããŸããã§ããããæè¿ã§ã¯ããã§ã
å®è£
ã
ããŠã
ãŸã ã
楜ããæ©èœ
äžèšã«å¯ŸåŠããåŸãããªãã¯æ¥œããããšã«éäžããããšãã§ããŸãã å®æçã«ã§ã¯ãªããŠãããããã®ããã€ããéåžžã«é »ç¹ã«é©çšã§ããŸãã
ãã¹ããããã¯ã©ã¹
PHPéçºè
ã«ãšã£ãŠãããã¯éåžžã«ãšããŸããã¯ãªãã®ã§ãã ã¯ã©ã¹ã¯åå空éã«ååšããŸãããã¯ã©ã¹ãšã¹ããŒã¹èªäœã¯åãååãæã€ããšãã§ããŸãã ãããã£ãŠãç¹å®ã®1ã€ã®ã¯ã©ã¹ã®ã¿ã«é¢é£ããã¯ã©ã¹ãããå Žåã¯ããããåå空éã«åçŽã«å°å
¥ããŸãã
ExplodingBoxException
ãã¹ããŒã§ããBoxã¯ã©ã¹ã
ExplodingBoxException
ãŸãã
namespace Acme\Foo; class Box { public function somethingBad() { throw new Box\ExplodingBoxException; } }
ãã®äŸå€ã¯ã©ããã«ååšããå¿
èŠããããŸãã ã¯ã©ã¹ã®æäžäœã«çœ®ãããšãã§ããŸããã1ã€ã®ãã¡ã€ã«ã«2ã€ã®ã¯ã©ã¹ããããŸã...äžè¬ã«ãå€ãã®äººã楜ããŸããŸãã PSR-1ã
ãããã¯ãåã¯ã©ã¹ãåå¥ã®ãã¡ã€ã«ã«ãããåå空éã§ã¯å°ãªããšã1ã€ã®ã¬ãã«ãã€ãŸããããã¬ãã«ãããã€ããŒã®ååãå¿
èŠã§ããããšãæå³ããŸããã
以äžããã®åå¥ã®ãã¡ã€ã«ã§ãã
namespace Acme\Foo\Box; class ExplodingBoxException {}
ãã®äŸå€ãããŒãããã«ã¯ããªãŒãããŒããŒã䜿çšããŠãã¡ã€ã«ã·ã¹ãã ã«å床ã¢ã¯ã»ã¹ããå¿
èŠããããŸãã ãããããªãœãŒã¹ã¯ããã«è²»ããããŠããŸãïŒ PHP 5.6ã§ã¯ããªãã³ãŒããã£ãã·ã¥ããªã³ã«ãããšãç¹°ãè¿ããããªã¯ãšã¹ãã®åé·æ§ãäœäžããŸãããããã§ãäœåãªäœæ¥ãçºçããŸãã
Rubyã§ã¯ãããã¯ã©ã¹ãå¥ã®ã¯ã©ã¹ã«ãã¹ãã§ããŸãã
module Acme module Foo class Box class ExplodingBoxError < StandardError; end def something_bad! raise ExplodingBoxError end end end end
ããã¯ãã¯ã©ã¹ãå®çŸ©ãããšããšã¯ã©ã¹å€ã§è¡ãããšãã§ããŸãã
begin box = Acme::Foo::Box.new box.something_bad! rescue Acme::Foo::Box::ExplodingBoxError
ããããå¥åŠã«èŠããŸãããéåžžã«äŸ¿å©ã§ãã ã¯ã©ã¹ã¯1ã€ã®ã¯ã©ã¹ã®ã¿ã«é¢é£ããŠããŸããïŒ ããããã°ã«ãŒãåããŸãïŒ
å¥ã®äŸã¯ãããŒã¿ããŒã¹ã®ç§»è¡ã«é¢é£ããŠããŸãã CodeIgniterããLaravelãŸã§ãå€ãã®äžè¬çãªPHPãã¬ãŒã ã¯ãŒã¯ã§äœ¿çšãããŠããŸãã 移è¡äžã«ã¢ãã«ãŸãã¯å¥ã®ã¯ã©ã¹ãåç
§ããŠããå€æŽãããšãå€ã移è¡ã¯éåžžã«è€éã«ãªããŸãã
Rubyã§ã¯ããã®åé¡ã¯ãã¹ããããã¯ã©ã¹ã䜿çšããŠçŸãã解決ãããŸãã
class PopulateEmployerWithUserAccountName < ActiveRecord::Migration class User < ActiveRecord::Base belongs_to :account end class Account < ActiveRecord::Base has_many :users end def up Account.find_each do |account| account.users.update_all(employer: account.name) end end def down
ã°ããŒãã«ã«å®£èšãããã¯ã©ã¹ã®ä»£ããã«ã
User
ããã³
Account
ORMã¢ãã«ã®ãã¹ããããããŒãžã§ã³ã䜿çšãããŸãã ã€ãŸããå¿
èŠã«å¿ããŠããããã¯ç§ãã¡ã®ã¹ãããã·ã§ãããšããŠæ©èœããŸãã ããã¯ãã²ãŒã ã®ã«ãŒã«ããã€ã§ãå€æŽã§ããæ¡ä»¶ã§ã³ãŒããåŒã³åºããããã¯ããã«äŸ¿å©ã§ãã äžéšã®äººã«ãšã£ãŠã¯ã移è¡ã®åé¡ã«åºããããŸã§ãããã¯ãã¹ãŠã¯ã€ã«ãã«èãããŸãã
ãããã¬ãŒ
XDebugã¯çŽ æŽããããã®ã§ãã ãã¬ãŒã¯ãã€ã³ãã®äœ¿çšã¯ãPHPã¢ããªã±ãŒã·ã§ã³ã®ãããã°ã«å°ããªé©åœããããããåå¿è
éçºè
ã®éã§åºã䜿çšãããŠããã¹ããŒã ãããé«åºŠãª
var_dump()
+æŽæ°ã¹ããŒã ã®å®è£
ãå¯èœã«ããŸããã
ã€ãŸããXDebugãIDEã§åäœãããé©åãªã¢ããªã³ãèŠã€ãïŒå¿
èŠã«å¿ããŠïŒãphp.iniãèšå®ããŠ
zend_extension=xdebug.so
ãCLIããã³ã¢ããªã±ãŒã·ã§ã³ã®WebããŒãžã§ã³ã§äœ¿çšãããã€ã«ã¹ããŒã³ãéä¿¡ããã®ã«
zend_extension=xdebug.so
å¯èœ
zend_extension=xdebug.so
ããããŸããVagrantãªã©ã䜿çšããŠããå Žåã§ã
Rubyã®ã¢ãããŒãã¯å°ãç°ãªããŸãã ãã©ãŠã¶ãŒã§JavaScriptããããã°ããå Žåãšåæ§ã«ãã¯ãŒã
debugger
ãã³ãŒãã«æ¿å
¥ããã ãã§ãã¬ãŒã¯ãã€ã³ããååŸã§ããŸãã ãã®è¡ãå®è¡ããããšããããã
$ rails server
ãåäœãã¹ããçµ±åãã¹ããªã©ã§ããããšã¯åé¡ã§ã¯ãããŸããã -ã³ãŒãã䜿çšã§ãã
REPLã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
ããã«ããã€ãã®ãããã¬ãŒãããããã®ãã¡æã人æ°ã®ãããã®ã¯
pry
pry
ãããŠ
byebug
ã ã©ã¡ããgemã§ãããããããã€ã³ã¹ããŒã«ããã«ã¯ãBundlerãä»ããŠ
Gemfile
ã³ãŒããè¿œå ããå¿
èŠããããŸãã
group :development, :test do gem "byebug" end
ããã¯ãdev ComposeräŸåé¢ä¿ã®é¡äŒŒç©ã§ãã Railsã䜿çšããå Žåã¯ãã€ã³ã¹ããŒã«åŸã«ã
debugger
åŒã³åºãã ãã§ãã ããã§ãªãå Žåã¯ããŸã
require "byebug"
å®è¡ãã
require "byebug"
ããããŸãã
Railsãã¥ãŒããªã¢ã«ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã«é©åãªããŒã¯ãŒããåã蟌ãã åŸããã¹ãŠãã©ã®ããã«æ©èœãããã説æããŠããŸãã
[1, 10] in /PathTo/project/app/controllers/articles_controller.rb 3: 4:
ç¢å°ã¯ãREPLã€ã³ã¹ã¿ã³ã¹ãéå§ããè¡ãæããŸãã ã³ãŒãããçŽæ¥ã³ãŒãã®å®è¡ãéå§ã§ããŸãã ãã®å Žæã§ã¯ã
@articles
ãŸã å®çŸ©ãã
@articles
ããŸãããã
Article.find_recent
ãåŒã³åºããŠäœãèµ·ããããèŠãããšãã§ããŸãã ãšã©ãŒãçºçããå Žåãã
next
ãšå
¥åããŠåãã³ã³ããã¹ãã®æ¬¡ã®è¡ã«ç§»åã§ããŸãã ãŸãã¯ã
step
ãšå
¥åããŠã次ã®ã¹ããŒãã¡ã³ããå®è¡ããŸãã
ããã¯ãç¹ã«ã³ãŒããå¿
èŠãªãã®ãåºåããªãçç±ãç解ããããšããŠããå Žåã«äŸ¿å©ã§ãã ãã®ã³ã³ããã¹ãã§åå€ã®åäœã確èªããå®è¡çµæã«é¢ä¿ãªãäœæ¥ã³ãŒãããã¡ã€ã«ã«ã³ããŒã§ããŸãã ãã¹ãã«éåžžã«äŸ¿å©ã§ãã
ããªãéã
å€ãã®äººã¯ããã§ãªã
unless
奜ãã§ã¯ãããŸããã ä»ã®å€ãã®èšèªã®ä»ã®å€ãã®ãã®ãšåæ§ã«ããããã¯ãã°ãã°èââåŸ
ãããŸãã 2008幎ã®
èšäºã«èšèŒãã Unless
ãã
Unless
ãé·å¹Žã«ããã£ãŠäººã
ã
Unless
ããå Žåã
é€ããŸã ã
exceptæ§é ã¯
if
ãåæèªã
if
ã æ¡ä»¶ã
true
å Žåãã³ãŒãã¯ãããã¯ããã
false
å Žåãå®è¡ã¯ç¶ç¶ãã
false
ã
unless foo?
ããã«ãããç¹ã«å€æ°ã®æ¡ä»¶äžã§äœæ¥ãå°ãç°¡åã«ãªããŸãã 䜿çšã§ããŸã|| ããã³æ¬åŒ§ã ãã®è¡ã®ä»£ããã«ïŒ
if ! (foo || bar) && baz
æžãããšãã§ããŸãïŒ
unless (foo || bar) && baz
ããããããã¯å€ãããã®ã§ã
else
ã䜿çšã
unless
else
䜿çšã§ããŸã
else
ããããèªäœã¯äŸ¿å©ãªããŒã«ã§ãã PHPã§ã®ãã®å®è£
ã¯2007幎ã«äŸé ŒãããŸãããããã°ããã®éãèŠæ±ã¯ç¡èŠãããŸããã æåŸã«ãPHPã®äœæè
ã§ããRasmus Lerdorfã¯ã
unless()
é¢æ°ã¯åŸæ¹äºææ§ã«éåããããããè±èªãæ¯åœèªã§ã¯ãªã人ã«ã¯æããã§ã¯ãªãããšè¿°ã¹ãŸããã
ãããã¯ãno ifããæå³ããå¥åŠãªåèªã§ããããlessãããmoreãã®å察ã§ããããšã«è«ççã«é¡äŒŒããŠããå¿
èŠããããŸãããæ¥é èŸãunãã¯ãã®æå³ãå察ïŒless-éãïŒãã
ç©è°ãéžã声æã ã§
unless
ã人ã
ããã®åèªãèªããšããæ¥é èŸ
un
ããã ãã«ããã®æå³ãã以äžã®å察ããšã¯èªèããŸããã ããã§ãªãå Žåã
uniqid()
é¢æ°ãèªã¿åãã
uniqid()
ã®å察ãš
iqid()
ãŸãã
è¿°èªã¡ãœãã
Rubyã«ã¯ãPHPã§ç°ãªãæ¹æ³ã§è§£æ±ºãããèå³æ·±ãèŠåãæ°å€ããããŸãã ãããã®1ã€ã¯ãè¿°èªã¡ãœãããã€ãŸãããŒã«åã®å¿çã¿ã€ããæã€ã¡ãœããã§ãã ååç
§ãRubyã§è¿ãããªãããšãèãããšããã®ãããªã¡ãœããã¯åœ¹ç«ã€å ŽåããããŸãã
äŸãã°ã
object.nil?
ãªã©ãè¿°èªã¡ãœããã®å€ãã¯ãã§ã«Rubyã«çµã¿èŸŒãŸããŠã
object.nil?
ã å®éãããã¯PHPã®
$object === nil
é¡äŒŒç©ã§ãã ã¢ã¯ã·ã§ã³ãå®è¡ããªãã§äœããèŠæ±ããå¿
èŠãããå Žåã
include?
ã䜿çšããæ¹ãè¯ã
include?
include
代ããã«ã
ç¬èªã®è¿°èªã¡ãœãããèšå®ããããšãã§ããŸãïŒ
class Rider def driver? !potential_driver.nil? && vehicle.present? end end
è¿°èªã¡ãœãããäœæãããšããå€ãã®PHPéçºè
ã¯æ¥é èŸ
is
ããã³/ãŸãã¯
has
ãååã«è¿œå ããããšãã°
isDriver()
ãŸãã¯
hasVehicle()
ãŸãã ããããæã«ã¯ä»ã®ãã¬ãã£ãã¯ã¹ãèŠã€ããããšãã§ããŸãã
can_drive?
ã¡ãœãããšèšã
can_drive?
Rubyã®PHPã§ã¯
canDrive()
ã«ãªããŸããããããè¿°èªã¡ãœããã§ããããšã¯å®å
šã«ã¯æããã§ã¯ãããŸããã äŒçµ±ã«ããã°ã
isAbleToDrive()
ãããªååã«å€æŽããæ¹ãè¯ãã§ãããã
ããã«ç°¡æœãªé
åæ§æ
PHPã§ã¯ããªãã©ã«é
åãç°¡åã«å®çŸ©ã§ããŸããPHP5.4以éã§ã¯ãããã«ç°¡æœãªæ§æããããŸãã
誰ãããã®å Žåã
ç°¡æœã«ãããå°ãäžæžããããšèšããããããŸããã Ruby 1.9ã§ã¯ã=>ãã»ãã³ãã³ã«çœ®ãæããããšãã§ãããªãã·ã§ã³ãç»å ŽããŸããã PHPã§ã¯ãããã«å
ãžé²ãããšãã§ããŸãã
$a = ['one': 1, 'two': 2, 'three': 'three'];
ãã¹ããããé
åã1æ¥ã«æ°çŸåå
¥åããå¿
èŠãããå Žåãªã©ãå Žåã«ãã£ãŠã¯ããã¯éåžžã«äŸ¿å©ã§ãã æ§æãç°¡çŽ åããææ¡ã¯2011幎ã«
æçš¿ãããŸãããããŸã åãå
¥ããããŠããŸããã ãããã圌ãã¯ããŸããã PHPã§ã¯ãæ°ãããã®ãå€ãã®å©ç¹ãçŽæããŠããå Žåã§ããæå°éã®æ§æãç¶æããããšããå€ããã®ãå®è£
ããæ°ããæ¹æ³ãå°å
¥ããããšã¯ã»ãšãã©ãããŸããã ã·ã³ã¿ãã¯ã¹ãžã³ãžã£ãŒãã¬ããCookieã¯PHPããŒã ã«ãšã£ãŠã®åªå
äºé
ã§ã¯ãããŸããããRubyã§ã¯ãããã»ãŒäž»ãªæ¹åã§ãã
ãªããžã§ã¯ããªãã©ã«
ãã®æ©èœã¯Rubyã§å©çšå¯èœã§ãå€ãã®éçºè
ãPHPã§èŠãããšæã£ãŠããŸãã ããã§å€ã䜿çšããŠ
StdClass
ã¯ã©ã¹ãå®çŸ©ããå¿
èŠãããå Žåã2ã€ã®æ¹æ³ããããŸãã
$esQuery = new stdClass; $esQuery->query = new stdClass; $esQuery->query->term = new stdClass; $esQuery->query->term->name = 'beer'; $esQuery->size = 1;
PHPã§ã¯åžžã«ãã®ããã«ãªã£ãŠããŸããããã£ãšç°¡åã«ã§ããŸãã ã»ãŒå®å
šã«æ§æãRubyããåçšãããšããŸãããïŒ
Php $esQuery = { "query" : { "term" : { "name" : "beer" } }, "size" : 1 };
ã«ã㌠esQuery = { "query" : { "term" : { "name" : "beer" } }, "size" : 1 }
ãã®é©æ°ãPHPã§èŠãããšæã£ãŠããŸããããããŸã§ã®ãšããéçºè
ã®é¢å¿ã¯ãããŸããã
æå©æ¹æ³
PHPã«ã¯
try/catch
ããããRubyã§ã¯
begin/rescue
ããã
begin/rescue
ã ç¹ã«PHP 5.6ã®ç»å Žã«ç
§ãããŠãRubyã®ã·ã¥ã¢ã®é¡äŒŒç©ãšããŠãã»ãšãã©åãããã«æ©èœããŸãã ã©ã¡ãã®èšèªã§ãã
try
ããã³
begin
ã³ãã³ããæ©èœ
begin
ä»»æã®å Žæããé€å€ããåŸã«å埩ããå¯èœæ§ããããŸãã ããããRubyã§ã¯ããã«å€ãã®ããšãã§ããŸããbeginã¡ãœãããã¹ãããããŠãé¢æ°/ã¡ãœããã®æ¬äœããçŽæ¥å埩ã§ããŸãã
ã«ã㌠def create(params) do_something_complicated(params) true rescue SomeException false end
äœããããŸããããªãå Žåã¯ããªãããã®æ¹æ³ã§ãšã©ãŒãåŠçããæã£ããã誰ãã«é»è©±ããŠè§£æ±ºãããããããšã¯ã§ããŸããã ããã¯äžèœè¬ã§ã¯ãããŸãããã
begin
ãã¹ãŠãã©ããããããšãªããããŸããŸãªå¯èœæ§ãæã£ãŠããæ¹ãè¯ãã§ãã
æ®å¿µãªããããã®ã¢ãããŒãã¯PHPã§ã¯æ©èœããŸããããå®è£
ãããå Žåãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
function create($params) { do_something_complicated($params); return true; } catch (SomeException $e) { return false; }
äžèŠãããšããããã®ããšã¯ããã»ã©éèŠã§ã¯ãããŸããã ããããRubyã®éåžžã«å€ãã®å°ããªã¢ã¡ããã£ããèšèªãæ¬åœã«ããªããå©ããããšããæçšã§ãããšæããŠããã®ã§ãã
äŸå€åŸã®åè©Šè¡
éåžžã«äŸ¿å©ãªããŒã«ã¯ã
retry
ã³ãã³ãã§ãã
begin SomeModel.find_or_create_by(user: user) rescue ActiveRecord::RecordNotUnique retry end
ãã®äŸã§ã¯ã
find_or_create_by
éã¢ãããã¯æ§ã«ãããèšèªéã®ç«¶åãåã³æªåããŠã
find_or_create_by
ïŒORMã¯æåã«
SELECT
ãå®è¡ããŠãã
INSERT
å®è¡ããŸãïŒã ãŸããéãæªããã°ãå¥ã®ããã»ã¹ã
SELECT
åŸã
INSERT
åã«ã¬ã³ãŒããäœæããå ŽåããããŸãã
ããã¯ãã§ã«çºçããå¯èœæ§ãããããã
SELECT
䜿çšããŠã
begin...rescue
ãç¹°ãè¿ãå®è¡ããããšããå¯èœæ§
SELECT
æäŸããããšãã
SELECT
ãŸãã ãããããå Žåã«ãã£ãŠã¯ãããã«äœããã®ããžãã¯ã1ã€ãŸãã¯2ã€åºåããããã«ããã«é
眮ãããããšããããŸããããã®ãªãã·ã§ã³ã¯èæ
®ããŸããã ã³ãŒããåå®è¡ãã䟿å©ããããããç解ããŸãããã Rubyã§ã¯ãããã¯æ¬¡ã®ããã«å®è¡ã§ããŸãã
def upload_image begin obj = s3.bucket('bucket-name').object('key') obj.upload_file('/path/to/source/file') rescue AWS::S3::UploadException retry end end
ãŸããPHPã§ã¯ãæåã«åæãããã¯ã®ã³ã³ãã³ãçšã®æ°ããé¢æ°/ã¡ãœãããäœæããå¿
èŠããããŸãã
function upload_image($path) { $attempt = function() use ($path) { $obj = $this->s3->bucket('bucket-name')->object('key'); $obj->upload_file($path); }; try { $attempt(); } catch (AWS\S3\UploadException $e) $attempt(); } }
ã©ã¡ãã®å Žåããäœããã®çš®é¡ã®ãã³ãã¬ãŒããã©ã³ã¯ã䜿çšããŠãµã€ã¯ã«ãåæ¢ããããšãã§ããŸãã ããããåå®è¡ã«é¢ããŠã¯ãRubyã³ãŒãã®ã»ãããã£ãšãããã§ãã ãããã«ãããšããã®æ©èœã«é¢ããŠç©æ¥µçãªäœæ¥ãé²è¡äžã§ãã ãããããPHP 7.1ã§è¡šç€ºãããã§ãããã
æåŸã«ããã€ãã®èã
å°ãåãŸã§ãç§ã¯PHPãšåãæ¹æ³ã§Rubyã§æžããŠããããšã«æ°ä»ããŸããã ãããã匷åã§çµéšè±å¯ãªRubyéçºè
ãšååããŠãããã€ãã®ç¬ç¹ã§ãããã«ç°ãªãã¢ãããŒããåŠã³ãŸããã ãã®ããããã®èšäºã§ã¯ãPHPã«æ»ã£ãå Žåã«ãã®èšèªã§èŠéããŠãããã®ãåæ ããŸããããæ»ã£ãŠããªãããã«ããã»ã©ã§ã¯ãããŸããã å€ãã®PHPå«æªè
ã¯ãPHPã§å°å
¥ãããé©æ°ãç¡èŠããŠããŸãã ãŸããRubyã«å
žåçãªäŸ¿å©ã§äŸ¿å©ãªãã®ã¯ãããŸããããPHP 7ã«ã¯ä»ã«ãéåžžã«èå³æ·±ãæ©èœããããããããŸãã
è¿å¹ŽãPHPã¯äžè²«æ§ã®ç¹ã§ç¹ã«æ¹åãããŸãããç¹ã«ã
çµ±äžãããå€æ°æ§æ ã
ã³ã³ããã¹ãäŸåã¬ã¯ãµãŒãããã³
æœè±¡æ§æããªãŒã®ããã§ãã ããã«ãããæšæºã©ã€ãã©ãªã®äžè²«æ§ã®çšåºŠã«é¢ä¿ãªããPHPã®äžè²«æ§ã倧å¹
ã«åäžããŸãã
è¿ãå°æ¥ãæšæºã©ã€ãã©ãªãæ¹åãããå¯èœæ§ã¯äœããããæ°ãã䟿å©ãªæ©èœãšæ§æææ³ã®åºçŸã®ã¿ãæè¿ããå¿
èŠããããŸãã ä»ã®èšèªã§ã奜ããªã ãå®éšããããŸããŸãªçè«ãæ¬æ°ããè©Šããããã°ã©ããŒãªãœãŒã¹ã®ãã¥ãŒã¹ãã£ãŒãã«é£æãæäŸã§ããŸãã ãããŠãPHPã¯ãŸãã«ãã®èšèªãå¿
èŠãšãããã®ãåçšããŸãã ããã¯å¹æçãªã¢ãããŒãã§ãã
PHPã®æµ·è³ç¥å¥ªè
ãšèŠãªãããš
ãã§ã
ãŸã ã
æéãšåžæãããã°ãããŸããŸãªèšèªãè©ŠããŠãã ããã Rubyã¯è¯ãã¹ã¿ãŒããšãªããGoã¯ãšãŠã楜ãããElixirã¯æ··ä¹±ããŸãã楜ããã§ãã ããããããã¯æ¬¡ãã次ãžãšæ¥ãããšã§ã¯ãããŸããã åèšèªã«ååãªæéãå²ããŠã奜ã¿ãç解ããããã«æ
£ããå¿ã®èª¿åãæŽããããšãã§ããŸãã