Иван, недавно переехавший в город N. спросил: «Как твои дела?» - и протянул однокласснице букет полевых цветов. Она смутилась и покраснела, но букет приняла. Смеркалось...вы не разберете на предложения никакой регуляркой (и это я еще из Толстого пример не взял).
$(".input_has-clear").append("<i class='input__clear'>x</i>");
// Ставим обработчик на событие изменения поля
$('.input__control').on('change', function () {
// Находим родительский блок
$(this).closest('.input_has-clear')
// в родительском блоке находим нужный элемент
.find(".input__clear")
// скрываем или показываем элемент в зависимости от заполненности поля
// обратите внимание, что toggleClass вторым аргументом принимает чисто булевое значение
// поэтому при помощи двойного отрицания приводим строку к нему
// если она пустая - будет false и класс уберется, иначе - добавится
.toggleClass("input__clear_visible", !!$(this).val());
});
$(function() {
$(".input_has-clear").append("<i class='input__clear'>");
// 1. Этот код выполнится один раз при загрузке страницы,
// вам же, наверняка, нужно, чтобы элемент скрывался или показывался
// динамически по мере редактирования поля
// 2. .input_has-clear - это span, у него нет value
if($(".input_has-clear").val() != "") {
// Логика определения скрытия и показа класса неверная
// Если повесить на поле обработчик, то при вводе каждой буквы
// Элемент будет то скрываться, то показываться
$(this).find(".input__clear").toggleClass("input__clear_visible");
}
});
цикл выполняться не хочетВ вашем коде нет ни одного цикла.
$release->{"country-code"} или $release->{"@country"}
return "{$this->product}"
$this->product->__toString()
.class Product {
public function __toString() {
return 'foo';
}
}
class Thing {
private $product;
public function __construct() {
$this->product = new Product;
}
public function bar() {
// Писать меньше и можно гордиться своим крутым маневром
// Но через месяц надо вспоминать, зачем это кавычки вокруг свойства
return "$this->product";
// Наглядно и понятно, никакой магии
return $this->product->__toString();
}
}
$thing = new Thing();
var_dump($thing->bar());
function getSomeHtml() {
return $(this).html();
}
for (var p = 0, len = number.length; p < len; p++) {
if (number[p] == 'Свободен') {
number_js[p] = $('.ofice:eq(' + p + ')>.ofice_number>strong').map(getSomeHtml)[0];
for (var i = 0, len = rsrGroups.length; i < len; i++) {
if (number_js[p] == rsrGroups[i].data("room")) {
rsrGroups[i].attr('fill', '#F4DA6C');
}
}
}
}
number_js[p] = $('.ofice:eq(' + p + ')>.ofice_number>strong').first().html();
Может быть можно как то элегантнее решить данную задачу?Разумеется, можно. Достаточно понять, что вам нужно не строки таблицы сортировать, а данные. И уже данные потом рендерить.
empty($_POST['foo'])
, то вылезет NOTICE - Undefined index: foo.array_key_exists('foo', $_POST)
, но это значительно дольше набирать. Достоинства геттеров и сеттеров
- Используя геттеры и сеттеры вы можете осуществлять контроль за тем, какие именно данные содержатся в свойствах объекта, и отклонять любые некорректные значения.
- Так же вы можете осуществлять дополнительные операции перед тем, как установить или получить значение свойства (например, если обновление данного свойства должно вызывать некоторое действие, такое как оповещение пользователя).
- При установке значения, которое является объектом или массивом, вы можете явно указать тип переменной в сигнатуре функции(прим. public function setBar(Bar $bar)). К большому сожалению, PHP не позволяет проделывать тоже самое с типами int и string!
- Если значение свойства должно получаться из внешнего источника или среды исполнения, вы можете использовать ленивую загрузку данных — таким образом ресурсы, требуемые для загрузки данных, будут задействованы непосредственно во время получения значения свойства. Разумеется, в данном случае нужно соблюдать осторожность, и не следует получать данные из внешнего источника при каждом обращении к свойству. Будет лучше сделать одно обращение к базе данных и заполнить значения всех свойств сразу, чем делать это для каждого в отдельности.
- Вы можете сделать свойство доступным только на чтение или только на запись, путём создания только геттера или только сеттера.
- Вы можете добавить геттеры и сеттеры в интерфейс для того, чтобы отобразить их в API.
Недостатки геттеров и сеттеров
- Для разработчиков, которые используют прямой доступ к свойствам, геттеры и сеттеры кажутся настоящей головной болью! Для каждого свойства нужно определить само свойство, геттер и сеттер; и для того чтобы использовать данное свойство в коде, нужно осуществлять дополнительные вызовы метода — намного легче написать $foo->bar++; вместо $foo->setBar($foo->getBar() + 1); (хотя, конечно, можно добавить ещё один метод $foo->incrementBar();)
- Как уже отмечалось выше, существуют небольшие дополнительные расходы, затрачиваемые на вызов метода.
- Имена геттеров и сеттеров принято начинать с глаголов get и set, но данные глаголы так же могут использоваться и в других методах, которые ни коим образом не относятся к свойствам класса.
methods.init.apply(this, arguments);
onError = (error) ->
throw error if error.syscall isnt 'listen'
# handle specific listen errors with friendly messages
switch error.code
when 'EACCES'
console.error 'Port ' + port + ' requires elevated privileges'
process.exit 1
when 'EADDRINUSE'
console.error 'Port ' + port + ' is already in use'
process.exit 1
else
throw error