Все решения, представленные здесь, используют события с одним ключом. Это очень подвержено ошибкам, поскольку ввод также может быть задан с помощью copy'n'paste или drag'n'drop. Также некоторые из решений ограничивают использование несимметричных клавиш, таких как ctrl+c
, Pos1
и т. Д.
Я предлагаю, а не проверять каждое нажатие клавиши, проверяя, является ли результат действительным в отношении ваших ожиданий .
var validNumber = new RegExp(/^\d*\.?\d*$/);
var lastValid = document.getElementById("test1").value;
function validateNumber(elem) {
if (validNumber.test(elem.value)) {
lastValid = elem.value;
} else {
elem.value = lastValid;
}
}
<textarea id="test1" oninput="validateNumber(this);" ></textarea>
Событие oninput
запускается сразу после того, как что-то было изменено в текстовой области и перед визуализацией.
Вы можете расширить RegEx до любого формата, который вы хотите принять. Это намного удобнее и удобнее, чем проверка одиночных нажатий клавиш.
В PHP 5 + объекты передаются ссылкой. В PHP 4 они передаются значением (вот почему, это имело передачу во время выполнения ссылкой, которая стала устаревшей).
можно использовать оператор 'клона' в PHP5 для копирования объектов:
$objectB = clone $objectA;
кроме того, это - просто объекты, которые передаются ссылкой, не всем, как Вы сказали в своем вопросе...
Согласно предыдущему комментарию, если у Вас есть другой объект как членская переменная, делают следующее:
class MyClass {
private $someObject;
public function __construct() {
$this->someObject = new SomeClass();
}
public function __clone() {
$this->someObject = clone $this->someObject;
}
}
Теперь можно сделать клонирование:
$bar = new MyClass();
$foo = clone $bar;
Ответы обычно находятся в книгах Java.
клонирование: Если Вы не переопределяете метод клона, поведение по умолчанию является мелкой копией. Если Ваши объекты имеют только примитивные членские переменные, это полностью в порядке. Но на языке без типов с другим объектом как членские переменные, это - головная боль.
сериализация/десериализация
$new_object = unserialize(serialize($your_object))
Это достигает глубокой копии с большой стоимостью в зависимости от сложности объекта.
Согласно документам ( http://ca3.php.net/language.oop5.cloning ):
$a = clone $b;