С двумя классами, расширяющими другой, как избежать совместного использования атрибута - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть следующие классы.

Проблема в том, что $ _instance распределяется между AuthFactory и UserFactory.

class Factory {
    protected static $_instance;
    /*...*/
}

class AuthFactory extends Factory {
    protected static $_instance;
    /*...*/
}

class UserFactory extends Factory {
    protected static $_instance;
    /*...*/
}

Как можно избежать, чтобы объект в экземпляре AuthFactory :: $ _ был тем же объектом, что и экземпляр UserFactory :: $ _?? 1006 *

Вся причина этого в том, что я могу установить структуру в Factory и расширять ее для каждой фактической фабрики, которую я хочу использовать.

1 Ответ

1 голос
/ 25 ноября 2011

Мой опыт выглядит следующим образом:

Если вы объявите свойство статическим, то его значение будет разделено между классом, в котором оно определено, и всеми подклассами.

Исключением является повторное объявление того же свойства в подклассах.В этом случае каждый подкласс будет иметь свое значение.Это означает, что вы должны помнить, чтобы повторно объявить свойство.

Однако из-за проблем, связанных с поздним статическим связыванием, если вы используете переменную self :: $ для доступа к свойству, то значение будет взято из суперкласса (если метод доступа был определен в суперклассе.Я не уверен, что произойдет, если метод доступа был определен в подклассе).

Если вместо этого вы используете static :: $ variable, это не должно вызывать проблем, но я не проводил такого тщательного тестирования при любых условиях.

Используете ли вы self :: $_instance или статический :: $ _ экземпляр для доступа к рассматриваемому свойству?Если это первое, попробуйте перейти на второе.

Я подозреваю, однако, может быть, лучше сделать свойство нестатичным, в зависимости от того, для чего оно предназначено.

...