Поскольку конструкторы - это детализация реализации - они не являются чем-то, что пользователь интерфейса / суперкласса действительно может вызвать вообще. Когда они получат экземпляр, он уже построен; и наоборот, в то время, когда вы строите объект, по определению нет переменной, которой в настоящее время присвоено.
Подумайте, что это значит заставить все подклассы иметь наследуемый конструктор. Я утверждаю, что более прозрачно передавать переменные напрямую, чем для «магически» класса иметь конструктор с определенным количеством аргументов только потому, что это родитель.
Ваши правила на самом деле очень близки к тому, чтобы делать то, что вы хотите. Единственная проблема, которую я вижу, заключается в тестовых шаблонах для двух утверждений RewriteRule
. В настоящее время у вас есть
RewriteRule ^(.*)/?(.*)/?(.*)/?$ ...
... что эквивалентно следующему:
RewriteRule ^(.*)$
Это потому, что все, что проходит мимо первой группы захвата, может не совпадать ни с чем и все равно считаться совпадением, поэтому первая группа является жадной и соответствует всей входной строке без необходимости откладывать другие части шаблона.
Поскольку группы захвата в любом случае не должны захватывать прямые слэши, так как они используются в качестве разделителя переменных, простым решением будет изменить их на [^/]*
, следующим образом:
Edit: Я также изменил RewriteCond
во второй группе, чтобы игнорировать условие !-f
в случае /index.php
, что произойдет, если вы запросите поддомен без чего-либо после домена.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC]
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ index.php?var1=$1&var2=$2&var3=$3 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^(www|mail).domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+).domain.com$ [NC]
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ user.php?id=%2&var1=$1&var2=$2&var3=$3 [NC,QSA,L]