Как мне создать копию объекта в PHP?

Все решения, представленные здесь, используют события с одним ключом. Это очень подвержено ошибкам, поскольку ввод также может быть задан с помощью 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 до любого формата, который вы хотите принять. Это намного удобнее и удобнее, чем проверка одиночных нажатий клавиш.

143
задан tereško 12 July 2014 в 07:52
поделиться

4 ответа

В PHP 5 + объекты передаются ссылкой. В PHP 4 они передаются значением (вот почему, это имело передачу во время выполнения ссылкой, которая стала устаревшей).

можно использовать оператор 'клона' в PHP5 для копирования объектов:

$objectB = clone $objectA;

кроме того, это - просто объекты, которые передаются ссылкой, не всем, как Вы сказали в своем вопросе...

244
ответ дан Eran Galperin 12 July 2014 в 07:52
поделиться
  • 1
    Вы знаете какой-либо шрифт Windows, который, как предполагается, имеет его? Быстрый взгляд в Символьное Средство выбора показывает, что этот символ не находится в большинстве списков. – FroMage 27 February 2009 в 16:28

Согласно предыдущему комментарию, если у Вас есть другой объект как членская переменная, делают следующее:

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;
19
ответ дан John Carter 12 July 2014 в 07:52
поделиться
  • 1
    Я мог, но I’m, предполагающий, что должен быть способ заставить Windows представить его correctly†¦, Возможно, it’s шрифт issue†¦ – FroMage 27 February 2009 в 16:20

Ответы обычно находятся в книгах Java.

  1. клонирование: Если Вы не переопределяете метод клона, поведение по умолчанию является мелкой копией. Если Ваши объекты имеют только примитивные членские переменные, это полностью в порядке. Но на языке без типов с другим объектом как членские переменные, это - головная боль.

  2. сериализация/десериализация

$new_object = unserialize(serialize($your_object))

Это достигает глубокой копии с большой стоимостью в зависимости от сложности объекта.

92
ответ дан kamal pal 12 July 2014 в 07:52
поделиться
  • 1
    Нет, извините. Но Windows имеет, вероятно, некоторые Шрифты юникода также. – Gumbo 27 February 2009 в 17:06

Согласно документам ( http://ca3.php.net/language.oop5.cloning ):

$a = clone $b;
9
ответ дан rink.attendant.6 12 July 2014 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: