aboulfazl, поскольку методы PHP 5.3.3 с тем же именем, что и класс, не будут рассматриваться как конструктор!
YourClass
{
public $any = false;
public function __construct($any = null)
{
$this->any = (is_null($any) ? $this->any : $any);
}
}
Это работает, но не спрашивает владелец темы, Джон дает awnser!
Обратите внимание, что вы, вероятно, смущены тем, что показано в toString
и как равенство (equals
) ведет себя.
То, что вы видите, является результатом toString()
. Любой тип может решить, как может выглядеть его строковое представление, переопределив этот метод. Это, однако, не влияет на то, как объекты этого типа сравниваются друг с другом. Вот где появляется equals
(в некоторых случаях также compare
).
Другие писали что-то о том, что базовый тип сравниваемых объектов не равен (одна сторона StringBuilder
и другая String
). Однако актуальной проблемой является equals
-метод. Возможно (обычно это не делается по разным причинам), что equals
для определенного типа поддерживает равенство различных типов объектов (такое поведение (должно быть) должно быть упомянуто в интерфейсе по крайней мере). Если ничего не указано, можно предположить, что выполняется равенство по умолчанию из Object.equals
.
В этом случае, однако, CharSequence
-javadoc уже заявляет следующее о равенстве (выделено мое):
Этот интерфейс не уточняет общие контракты [ 1111] и
blockquote>hashCode
методы. Результат проверки двух объектов, которые реализуют CharSequence на равенство, поэтому, как правило, не определен . Каждый объект может быть реализован отдельным классом, и нет никакой гарантии, что каждый класс сможет проверить свои экземпляры на равенство с другими. Поэтому нецелесообразно использовать произвольные экземпляры CharSequence в качестве элементов в наборе или в качестве ключей на карте.Подводя итог: забудьте, что вы получили
String
илиStringBuilder
изsubSequence
иreversed
. Контракт метода указываетCharSequence
, и поэтому вы должны обрабатывать его какCharSequence
. Нет гарантии, что эти функции все равно будут возвращатьString
илиStringBuilder
в будущем.