структура директории:
libs - каталог
index.php - точка входа
В каталоге libs лежит файл test.php, содержимое которого:
class Test
{
public function init()
{
echo 'init<br>';
}
}
Содержимое файла index.php:
class Main
{
public $prop;
public function __construct()
{
include_once('libs/test.php');
$this->prop = new Test();
}
}
Проблема:
$m = new Main();
// Все обращения к объекту класса Test должны быть через свойство prop
// класса Main
$m->prop->init();
// Объект класса Test НЕ ДОЛЖЕН быть создан
$t = new Test();
$t->init();
Можно ли реализовать в php так, чтобы объект класса Test невозможно было создать вне конструктора класса Main?
В пхп нет групп классов ( нет аналога с пакетов из java) , поэтому все другие классы кроме родителей и детей класса Test будут для него внешними, в том числе Main. Поэтому если из Main можно создавать Test и они не наследуют друг друга, что очевидно по названию, то его можно создавать откуда угодно, так как в этом случае конструктор должен быть публичным. Поэтому ответ нет, нельзя. Тем не менее не ясна цель зачем так делать? Паттерн нужны не столько для ограничения программистов сколько для передачи им идей как оно все тут работает, поэтому если не следовать известному паттерну то конструкция будет непонятна следующему разработчику и он тут же её сломает. Если синглтон не ложится на твою цель (должно быть несколько классов Test в каждом Main свой) почитай про dependancy injection, там присутствует третий класс который решает какой именно Test положить в очередной Main.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите как в PHP через foreach заполнить ассоциативный массив вида
Проинициализировать два массива, которые задают n точек координатами (X, Y) в двумерном пространствеОписать функцию, которая найдет расстояния...
В Qt, с помощью QChart реализуется простой графикВ ходе работы возникла необходимость масштабирования по оси X, было решено реализовывать с помощью...
Ошибка:error: no match for 'operator+' (operand types are 'std::_List_iterator<double>' and 'int')