PHPにうまく変換されない、ルビーから持ってきたいくつかの重要な仮定があります。
PHPでオブジェクトプロパティ(Rubyのインスタンス変数と同等)を宣言して使用する正しい方法は次のとおりです。
class Foo
{
//accesible from inside this objects of this class,
//objects that have this class as an ancestor, and from
//outside the object
//var $bar; is equivalent. "var" is PHP 4 syntax,
//when everything was public
public $bar;
//accesible from inside this objects of this class,
//objects that have this class as an ancestor
protected $baz;
//accesible from inside this objects only
private $fiz;
protected function example()
{
echo $this->bar . "\n";
echo $this->baz . "\n";
echo $this->fiz . "\n";
}
}
PHPのOO構文は、Java / C#の世界観に基づいています。ただし、すべてのPHPページ/スクリプト/プログラムはグローバルスコアで開始される$this
ため、ローカルオブジェクトへの疑似参照が必要です。これがないと、このような状況の周りにかなりのあいまいさが生じます。
//In main.php
$foo = "bar";
include('example.php');
//in example.php
class Example
{
public $foo="baz";
public function scopeIsHardLetsGoShopping()
{
global $foo;
echo $foo;
}
}
したがって、メソッドでは、参照される$ fooをオブジェクト変数にする必要がありますか、それともグローバル変数にする必要がありますか?それがオブジェクト変数であるべきだと言うなら、どのようにしてメソッドからグローバルfooにアクセスしますか?それがグローバル変数であるべきだと言うなら、同じ名前の変数をグローバルとして宣言した後、どのようにローカルプロパティにアクセスしますか?
RubyとPythonは、言語の開始時にいくつかの考えをスコーピングしたので、これらの問題を回避できます。PHPは、フォームを処理してHTMLを出力するためにいくつかのCコードをハックする簡単な方法として始まりました。PHPは下位互換性を保つために合理的な努力をしているため、$thisのような風変わりな回避策になってしまいます。
Rubyから来ると、少し冗長に見えますが、PHPの基本的な部分です。