Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 108

Статические методы

18.03.2018, 11:48. Показов 2356. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня! Борюсь далее с изучением.

Делаю такое ДЗ:

1.Создайте класс Valid, в котором реализуйте статический метод validEmail($email). Метод validEmail() должен выбрасывать следующие исключения: пустая строка – исключение с message «E-mail не указан», некорректный e-mail (не прошёл проверку в регулярном выражении) – исключение «E-mail указан неправильно», длина e-mail больше 255 символов – исключение «Слишком длинный e-mail». Если всё хорошо, то метод возвращает true.
2. Вызовите метод validEmail(), передавая ему разные параметры, а также перехватывайте и выводите исключения.

Примечание: Обратите внимание, что в методе validEmail() лишь выбрасываются исключения, а уже обработка (то есть блок try-catch) должна быть там, где вызывается этот метод.

Код:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Valid { 
public $reg = '/[a-z0-9_]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z]*\.)+([a-z]){2,4}/'; 
public static function validEmail($email) { 
if (empty($email)) throw new Exception('E-mail не указан'); 
else if (!preg_match($reg, $email))throw new Exception('E-mail указан не правильно!'); 
else if (strlen($email)>40) throw new Exception('Слишков длинный e-mail'); 
else return true; 
} 
} 
$checkin = new Valid; 
try {$checkin->validEmail('$email');} catch (Exception $e) {$e->getMessage();} 
$checkin->validEmail(''); 
$checkin->validEmail('HelloHelloHello'); 
$checkin->validEmail('hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello');

В ходе выполнения задания у меня возникла ошибка с проверкой на соответствие регулярному выражению, подскажите пожалуйста как было бы правильней. И ещё один вопрос, нужно ли на каждую отдельную ошибку писать свой блок try-catch или можно прописать один раз и методе getMessage() будет подставляться сообщение ошибки. Задание и моё решение прилагаю ниже. Спасибо, кто откликнулся.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2018, 11:48
Ответы с готовыми решениями:

Когда следует использовать статические методы
Доброго времени! Собственно сам вопрос в заголовке. Когда следует использовать статические методы в ООП и чем они отличаются от...

про статические переменные
почему при перезагрузки страницы $n остается = 1 ? <? function inc() { static $n; $n++; echo $n; } inc();

Статические страницы на PHP
Здравствуйте, скажите как сделать статические страницы? Например такая страница: topic.php?id=2 как сделать topic2.html Ну...

3
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
18.03.2018, 12:58
На сколько я знаю, со статическими методами работают не так:
PHP
1
2
$checkin = new Valid;
$checkin->validEmail();
А так:
PHP
1
Valid::validEmail();
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.03.2018, 14:15
Лучший ответ Сообщение было отмечено tracerX как решение

Решение

Цитата Сообщение от Raisin Zn Посмотреть сообщение
На сколько я знаю, со статическими методами работают не так:
Так то же можно. И в целом правильнее было бы делать метод нестатическим.
Да и исключение валидатор кидать не должен. Ну да ладно.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class EmailValidationException extends \Exception
{}
 
class EmailValidator
{
    public static function validEmail($email)
    {
        if ($email === '') {
            throw new EmailValidationException('E-mail не указан');
        }
        
        if (preg_match('/^[^@]+$/', $email)) {
            throw new EmailValidationException('E-mail указан неправильно');
        }
        
        if (mb_strlen($email) > 255) {
            throw new EmailValidationException('Слишков длинный e-mail');
        }
    }
}
 
try {
    EmailValidator::validEmail('');
} catch (EmailValidationException $e) {
    printf('Ошибка валидации: "%s"', $e->getMessage());
}
1
0 / 0 / 0
Регистрация: 01.04.2018
Сообщений: 1
01.04.2018, 21:43
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Valid { 
public static function validEmail($email) {
    $reg = '/[a-z0-9_]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z]*\.)+([a-z]){2,4}/'; 
if (empty($email)) {
    throw new Exception('E-mail не указан');
    return;
    }
else if (strlen($email)>40) {
    throw new Exception('Слишков длинный e-mail'); 
    return;
    }
else if (preg_match($reg, $email)) return;
else {
    throw new Exception('E-mail указан не правильно!');
    return; 
    } 
}}
$email = '';
try {Valid::validEmail($email);} catch (Exception $e) {echo $e->getMessage() . '<br/>';}
$email = 'HelloHelloHello';
try {Valid::validEmail($email);} catch (Exception $e) {echo $e->getMessage() . '<br/>';}
$email = 'hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello';
try {Valid::validEmail($email);} catch (Exception $e) {echo $e->getMessage() . '<br/>';}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2018, 21:43
Помогаю со студенческими работами здесь

Куда девать статические файлы
С наступающим новым годом))) Я пользуюсь MVC фрейморком написанный мною. По умолчанию вся статика(css, js, images) хранится прямо в корне...

Не получается сделать статические страницы
Здравствуйте уважаемые форумчане. У меня возникла проблема, все наверное знают движок DLE. Я практикуюсь в создании сайта и хочу сделать...

Используя статические объекты и статические методы, разработать программу движения по экрану прямой линии
Используя статические объекты и статические методы, разработать программу движения по экрану прямой линии и треугольника.

Используя статические объекты и статические методы, разработать программу движения по экрану прямой линии и квадрата.
Помогите, в решении задач, пожалуйста! 1. Используя статические объекты и статические методы, разработать программу движения по...

Статические методы
Доброго времени суток! Как можно написать метод void readLn(), который ждет нажатия enter, используя вот этот метод: static...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru