→

PHP программирование →  Переход от php4 к php5 (Статические члены класса. Исключения, определённые пользователем. Пространства имен)

Начало:
http://php5.com.ua/blog/php-programming/133.html
http://php5.com.ua/blog/php-programming/134.html
http://php5.com.ua/blog/php-programming/135.html

Статические члены класса


Статические члены и статические методы могут использоваться для реализации того, что в ООП называется «методы класса» и «переменные класса».

«Статическим методом класса» называют метод, который можно вызвать без создания объекта этого класса.
«Переменной класса» называют переменную, к которой можно обратиться без создания объекта этого класса (и метод доступа при этом не потребуется).

Пример: методы класса и переменные класса
<?php
class calculator {
  static public $pi = 3.14151692;

  static public function add($x,$y) {
    return $x + $y;
  }
}

$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
?>

Исключения — это общепринятый подход к обработке ошибок и неожиданных ситуаций в таких языках как Java и C++; в PHP5 перехват исключений реализован с помощью пары «try» — «catch».

Пример: Исключения
<?php class foo {

  function divide($x,$y) {
    if($y==0) throw new Exception("деление на ноль недопустимо");
    return $x/$y;
  }
}

$x = new foo();

try {
  $x->divide(3,0);  
} catch (Exception $e) {
    echo $e->getMessage();
    echo "\n<br />\n";
    // Какие-нибудь драконовские меры
}
?>


Как вы видите, «try» используется для обозначения блока, в котором находятся ошибки, обрабатываемые оператором «catch», стоящим в конце блока. В блоке «catch» вам нужно реализовать вашу собственную политику обработки ошибок. В итоге получаем удобочитаемый код и всего один блок обработки ошибок.

Исключения, определённые пользователем


Для обработки непредвиденных проблем в ваших программах вы можете определить ваши собственные исключения. Всё, что вам нужно — это просто дополнить (extend) класс Exception, определив конструктор класса и метод getMessage.

Пример: Исключения, определённые пользователем

<?php
class WeirdProblem extends Exception {

   private $data;

   function WeirdProblem($data) {
        parent::exception();
        $this->data = $data;
    }

    function getMessage() {
        return $this->data . " вызвало какое-то странное исключение!";
    }
}
?>


Потом, для возбуждения определённого вами исключения используйте конструкцию throw new WeirdProblem($foo); если исключение происходит внутри блока try{}, то PHP5 передаст управление в «catch»-блок для обработки.

Пространства имён


В целях удобства классы и функции могут быть сгруппированы в пространства имён (namespaces).

Примечение: разработчики отказались от поддрежки этой возможности.

Пример: Пространство имён
<?php
namespace Math {

  class Complex {
    //...код...
    function __construct() {
      print("привет");
    }
  }
}

$m = new Math::Complex();
?>

Обратите внимание на синтаксис использования именного пространства для обозначения класса, объект которого мы создаём. Пример практического применения: создание одноимённых классов в разных именных пространствах; при этом классы делают отличную друг от друга работу (имея одинаковый интерфейс).
1
1