вложенные классы

Bred Vilchec

Новичок
вложенные классы

Есть задача - написать класс, обрабатывающий пользователей и их привелегии на объекты (не в смысле ООП объекты).
У класса есть два класса-наследника - users и objects, думаю, логичней будет не обращаться к ним по отдельности, а в составе исходного класса, например, вот так:
$acc->users->method():

Упрощенно код такого способа выглядит так:
class acc
{
function __construct ()
{
$users=new users;
}

function method()
{
}
}

class users extends acc
{
}

Хотелось бы знать, можно так или нет, не противоречит ли это концепции ООП?
Или просто обращаться к каждому классу-потомку по отдельности...
 

Gas

может по одной?
Bred Vilchec
Имхо, как-то неправильно создавать в acc объект, который сам наследуется от acc. Это кстати работает?

Может лучше что типа
class Auth
{
private $users = new users
private $obj = new objects
}

где Auth это фасад для работы с системой в целом, дилегирует запросы к объектам users и objects (не наследуются от Auth).
 

Bred Vilchec

Новичок
Аможно ли употребить для этих целей интерфейсы?
Я перекопал статьи по PHP5, но что-то четкого определения где применять их я не нашел. Интуитивно - интерфейсы - это то что мне нужно в данном случае.

PS я в примере в первом посте забыл добавить "function" где надо:) Щас исправлю.
 

ecto

Новичок
помойму тебе просто нравится как выглядит эта стрелочка '->'
и совсем не интересно ООП
 

Bred Vilchec

Новичок
нет, ООП я обожаю, просто хотелось некоторого единства системы.

Ладно, проехали, буду использовать три класса по отдельности.
 

Vasya

Guest
Есть две сущности, описанные в объектах User и Object, а также отношение между ними. Отношение можно описать как объект или как интерфейс. Например, вот так:
1. Интерфейс:
PHP:
interface Permittable {
	function isPermitted(User u);
}

class User {}

class Object implements Permittable {
	function isPermitted(User u) {/*...*/}
}
2. Объект
PHP:
class User {}

class Object {}

class Guard {
	function isPermitted(User u, Object o) {/*...*/}
}
Первый случай предполагает, что класс Object должен "знать" о существовании класса User. Во втором случае -- нет, но это компенсируется большей (по сравнению с интерфейсом) сложностью в имплементации класса Guard.
 
Сверху