У меня та же проблема, и, как говорит piquadrat, это досадная ошибка, связанная с поддержкой локализации. Изменение USE_L10N = True
на False
решает эту проблему, предполагается, что это исправлено в Django 1.3.
Вообще говоря, если у вас более 4 аргументов, лучше вместо этого использовать временный объект или массив. Часто многие параметры являются необязательными, и это может довольно быстро стать довольно неудобным и подверженным ошибкам. Итак:
class MyClass {
public function __construct($options) { ... }
...
}
$o = new MyClass(array(
'uCode' => 'some value',
'uText' => 'another value',
));
Сравните это с:
$o = new MyClass('some value', '', '', '', '', 'another value');
Обратите внимание, что версия массива включает только то, что вы хотите передать.
Я склоняюсь к решению cletus, но другой альтернативой является использование функций set () для любых значений, которые не являются абсолютно необходимыми в конструкторе.
например, если $ uCode и $ uName обязательны, но остальные необязательны ...
public function __construct($uCode = '', $uName = '') {}
public function setUTime($uTime) {}
public function setUArea($uArea) {}
...
Иногда может быть полезно, чтобы ваши сеттеры возвращали $ this, чтобы вы могли объединять команды, например:
$object = new MyObject($code, $name);
$object->setUTime($time)->setUArea($area)->...;
Вы можете назначить такое количество параметров массиву и вместо этого передать этот массив в __construct, чтобы иметь только один параметр массива.
Если у вас слишком много аргументов, это признак того, что ваш метод может делать слишком много. Попробуйте разбить задачу на множество более мелких задач и реорганизовать метод. Если это не удается, можно передать класс со всеми параметрами.
вы можете использовать магические методы
class abc {
private $allowed = array(
'uCode',
'uId'
);
public function __set($name, $value) {
if (in_array($name, $this->allowed)) {
$this->$name = $value;
}
}
public function __call($name, $args) {
if (substr($name, 0, 4) == "set_") {
$var = substr($name, 4);
if (in_array($var, $this->allowed)) {
$this->$var = $args[0];
}
}
}
}
$abc = abc();
$abc->uCode = 123;
$abc->set_uId(123);