Вы также можете инкапсулировать данные в классе, скажем, Диапазон:
class Range {
protected $min;
protected $max;
public function __construct($str) {
if(preg_match('/^\d+$/', $str)) {
$this->min = (int)$str;
$this->max = (int)$str;
} else {
preg_match('/^(\d*)-(\d*)$/', $str, $matches);
$this->min = $matches[1] ? (int)$matches[1] : null;
$this->max = $matches[2] ? (int)$matches[2] : null;
}
}
// more functions here like contains($value) and/or min() and max()
public function __toString() {
return 'min=' . $this->min . ', max=' . $this->max;
}
}
$tests = array('40', '-40', '40-', '40-60');
foreach($tests as $t) {
echo new Range($t) . "\n";
}
, который производит:
min=40, max=40
min=, max=40
min=40, max=
min=40, max=60
Конечно, вы можете заменить вызовы preg_
на некоторые «нормальные» строковые функции, но единственное, что я знаю о PHP, - это какое-то регулярное выражение.
Это хорошая идея, но зачем делать переменные защищенными? Предположительно, вы хотите иметь доступ к данным, которые вы извлекли, в противном случае нет смысла ... –
@Matthew, да, они могут быть преданы гласности или оставить их защищенными и предоставить дополнительные методы в классе Range (который я оставил вне). –