Насколько мне известно с помощью friend объявляются классы и функции, которые могут получить доступ к приватным свойствам класса, в котором они указаны (как friend). Само по себе напрямую ковыряться в чужих свойствах, тем более приватных, никуда не годится (опять же с позиции ООП). Зачем? Первое что мы нарушим даже при самом грамотном подходе, грасповский принцип Information Expert.
operator служит для перегрузки операторов (внезапно). То есть, если в терминах PHP, то картина могла бы быть:
$objA = new ObjA();
$objB = new ObjB();
...
$objA + $objB;
Классно, только что этот перегруженный "+" означает в контексте именно данных объектов иди разберись. Надо открыть текст класса, посмотреть как перегружен, запомнить и держать в голове. Теперь представим, что в каждой группе классов, оператор "+" перегружен по разному и имеет совершенно различное поведение. Наступает кромешный ад! Слышал, в уважаемых конторах за перегрузку операторов отрывают различные органы. Как и за макросы, кстати.
Существует неофициальное соглашение, что перегрузка операторов уместна в случае, если она несет математический смысл. Например, сложение двух векторов, которые могут быть представлены структурами данных, или объектами. Тогда, в переводе на PHP:
$objVectorС = $objVectorA + $objVectorB;
имеет совершенно определенный смысл и не вызывает у прогрессивной части населения никакого бугурта. =)
Не лишним сказать С++ требует от программиста чрезвычайной самодисциплины, потому что в нем есть инструменты с помощью которых можно создать ад по структуре и запутанности код. Над которым сам спустя пару лет будешь плакать горькими слезами. Это к тому, что инструменты уместные в С++, который предполагает профессионалов, могут ужасающим образом сказаться для PHP, думаю по понятным причинам.
Но мне бы хотелось, для начала, простой перегрузки функций и методов по типам входных данных. То есть:
function foo(int $a)
{
... do something ...
}
function foo(string $a)
{
... do something else ...
}
Таким образом при вызовe foo(1) и foo('zap') имеем разное поведение. Тоже самое с разными типами объектов в параметрах.