Intereting Posts
Как отправить динамическое содержимое электронной почты без задания cron Как добавить пользователя в пользовательскую аудиторию facebook Ошибка исключения PDO при подключении к microsoft azure Symfony (фреймворк PHP) и MongoDB (или любая база данных на основе json) Можно ли установить лимит в выпадающем списке с несколькими выборами? Как описать внешний вид многоколоночного внешнего ключа в картографии Doctrine Проверка подлинности symfony2 regexp az AZ 0-9 Контроллер копирования Magento на локальный Использование регулярного выражения с preg_replace_callback Как я могу использовать «Injection Dependency» в простых функциях php, и должен ли я беспокоиться? Расширение загрузки php force Как преобразовать таблицу mysql в таблицу html для соответствия столбцам и строкам? Как преобразовать строку чисел, разделенных запятыми, в массив целых чисел? Ошибка twilio catching не работает показать контент на основе зарегистрированного пользователя user = role в wordpress с помощью PHP

Вернуть false из __constructor

Можете ли вы вернуть ложь от конструктора?

<?php class ftp_stfp{ //private vars of the class private $host; private $username; private $password; private $connection_type; private $connection = false; function __contruct( $host, $username, $password, $connection_type ){ //setting the classes vars $this->host = $host; $this->username = $username; $this->password = $password; $this->connection_type = $connection_type; //now set the connection into this classes connection $this->connection = $this->connect(); //check the connection was set else return false if($this->connection === false){ return false; } } ... etc etc the rest of the class 

Вызовите класс:

 $ftp_sftp = new ftp_sftp( $host, $uname, $pword, $connection_type ); 

Действительно ли это правильно, т. Е. Будет ли $ ftp_sftp var быть ложным или удерживать класс в зависимости от результата метода __construct, или это полностью неправильная логика?

Нет. Конструкторы не имеют возвращаемых значений. Если вам требуется получить какой-то результат от конструктора, вы можете сделать несколько вещей:

Если вам нужно вернуть значение, используйте метод для тяжелого подъема (обычно называемый init() ).

 public static function init( $host, $username, $password, $connection_type ){ //setting the classes vars $this->host = $host; $this->username = $username; $this->password = $password; $this->connection_type = $connection_type; //now set the connection into this classes connection $this->connection = $this->connect(); //check the connection was set else return false if($this->connection === false){ return false; } } $ftp_sftp = ftp_sftp::init(); 

Сохраните результаты в переменной-члене и проверьте ее значение после вызова конструктора.

 function __construct( $host, $username, $password, $connection_type ){ //setting the classes vars $this->host = $host; $this->username = $username; $this->password = $password; $this->connection_type = $connection_type; //now set the connection into this classes connection $this->connection = $this->connect(); } $ftp_sftp = new ftp_sftp( $host, $uname, $pword, $connection_type ); if ($ftp_sftp->connection !== false) { // do something } 

Вы можете использовать метод connect() для исключения. Это немедленно прекратит выполнение и перейдет в ваш блок catch :

 private method conntect() { // connection failed throw new Exception('connection failed!'); } try { $ftp_sftp = new ftp_sftp( $host, $uname, $pword, $connection_type ); } catch (Exception $e) { // do something } 

Конструкторы не могут возвращать значения. Вы можете сделать исключение в этой должности:

 if($this->connection === false){ throw new Exception('Connection can not be established.'); } 

Затем вы можете создать экземпляр переменной в блоке try-catch.

 try { $ftp_sftp = new ftp_sftp( $host, $uname, $pword, $connection_type ); } catch(Exception $e) { //Do whatever you want. } 

Я думаю, вы можете создать объект снаружи и напрямую использовать свой метод connect () и протестировать там

 $ftp_sftp = new ftp_sftp( $host, $uname, $pword, $connection_type ); $ftp_sftp->connect(); 

если соединение открыто.

Есть интересный вопрос о том, почему конструкторы не имеют возвращаемых значений. Почему конструкторы не возвращают значения? ,

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