A1x
Насчет поведения Явы с protected - оно тоже правильное
определение в дочернем классе свойства закрывает для класса Son родительское свойство hello. И они продолжают работать как приваты. Если это сделать в C# и установить ReSharper, то он даст ворнинг - типа свойство Father::hello перекрыто в классе Son.
Разумеется, таких перекрытий следует избегать, ибо protected подразумевает, что оно может понадобиться потомкам.
А вот PHP ведет себя не очень правильно, но можно привыкнуть
фактически, второе определение того же свойства в PHP работает просто как присвоение в конструкторе.
Насчет поведения Явы с protected - оно тоже правильное

определение в дочернем классе свойства закрывает для класса Son родительское свойство hello. И они продолжают работать как приваты. Если это сделать в C# и установить ReSharper, то он даст ворнинг - типа свойство Father::hello перекрыто в классе Son.
Разумеется, таких перекрытий следует избегать, ибо protected подразумевает, что оно может понадобиться потомкам.
А вот PHP ведет себя не очень правильно, но можно привыкнуть
