Есть несколько ключевых предположений, которые вы привели из ruby, которые плохо переводятся в PHP.
Правильный способ объявления и использования свойств объекта (эквивалентных переменным экземпляра Ruby) в PHP:
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";
}
}
Синтаксис OO в PHP основан на представлении о мире 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 начинался как быстрый способ взломать некоторый c-код для обработки форм и вывода HTML. Поскольку PHP прилагает разумные усилия для обеспечения обратной совместимости, в итоге вы получаете причудливый обходной путь, например $ this.
Форма Ruby кажется немного многословной, но это фундаментальная часть PHP.