Они такие, какие есть у вас сейчас, если вы позвоните:
$d = new hello();
$d->say();
Ничего не происходит, потому что say () просто возвращает значение ... Вам нужно отобразить или вывести это значение следующим образом:
$d = new hello();
echo $d->say();
Но это выведет только ту запятую, которую вы присвоили $ name. Значения $ this-> fname и $ this-> lname не были заполнены, поэтому возвращать им нечего.
Но подождите, вы могли бы сказать ... У меня есть этот метод attrib (), не должен ли он заполнить эти переменные? Ответ - да, но вы должны это назвать. Поэтому, используя ваш пример, вы получите то, что вы хотите:
$d = new hello(); //instantiates the class
$d->attrib(); //calls attrib() thus assigning those values
echo $d->say(); //echos out the values returned by say()
Самое главное, однако, это тот факт, что это не самый лучший способ сделать что-то подобное. Ответы, предоставленные Paolo и jonstjohn, показывают вам лучший способ справиться с этим, а Paolo - самый гибкий, поскольку вы можете каждый раз менять значения имени и фамилии.