1

Тема: Задача на 3

Всім привіт. Для новачків буде цікаво вирішити цю штуку. Всі рішення задач приховуємо у спойлер і у тег code
Отже є код:

<?php 
  try {
    echo 'Hello';

    throw new \Exception('Error');

  } catch (\Exception $e) {
    return null;
  }

# ваш код тут

На екрані виводиться Hello а треба дописати якийсь код, який буде виводити на екран ще додаткове слово 'World'
Є мітка: ваш код тут. Вище цієї мітки писати заборонено, можна тільки дописувати вниз.
На екрані має виводитись або 'Hello World' або 'HelloWorld'

Код має працювати у версіях php 5.5 і вище ;)

Успіху ;)

П.С. Ця методика вам може пригодитись у реальному житті.

Подякували: 221VOLT1

2 Востаннє редагувалося Vo_Vik (19.11.2015 16:43:52)

Re: Задача на 3

Прихований текст

Перевизначити стандартний клас ексепшинів чи що?

3

Re: Задача на 3

@Vo_Vik взагалі то я не так думав. Перевизначити не вийде ;)

4

Re: Задача на 3

Прихований текст

Написати блок finally? Тільки що загуглив, він є в пізніх версіях PHP.

5

Re: Задача на 3

@quez я тоді допишу умову що має працювати у версіях php 5.5 і вище ;)

6 Востаннє редагувалося VTrim (19.11.2015 19:34:24)

Re: Задача на 3

Трішки ускладнимо завдання.
Зробіть так,щоб код який знаходиться після блоку finally теж виконувався.

<?php 
  try {
    echo 'Hello';
 
    throw new \Exception('Error');
 
  } catch (\Exception $e) {
    return null;
  } finally {

  // ваш код

  }

echo 'World'; // це має запрацювати

7

Re: Задача на 3

Це ж треба, вже й PHP доросло до нормального юзання finally

П.С. Ця методика вам може пригодитись у реальному житті.

ось тільки PHP не пригодиться :)

п.с. ця методика існує вже давно, просто деякі мови доходять до неї ось як пізно...

8

Re: Задача на 3

@vtrim завтра спробую
@Master_Sergius не варто тут тролити PHP. Дякую.

Подякували: 221VOLT1

9

Re: Задача на 3

PHP не тролити, Pascal/Delphi не чіпати, та що ж це за напасть? Може ще Fortran чи Cobol реанімуємо :)

Добре, з поваги до представника Replace, Я більше так не буду. Просто якось стало трохи не цікаво на форумі. Почекаю чогось добренького.

10

Re: Задача на 3

Добре, з поваги до представника Replace, Я більше так не буду. Просто якось стало трохи не цікаво на форумі. Почекаю чогось добренького.

Якщо бажаєте доказати що мова, на якій в и пишете сама крута, а всі інші відстій, створіть тему і там аргументуйте. Є ж тема Срач віндовсі vs лінукс ;) От такий тип я і підтримую.

11

Re: Задача на 3

@VTrim я правильно розумію, код можна писати тільки там де є мітка   // ваш код і більше нічого не можна модифікувати, ні верх ні низ?

    <?php 
      try {
        echo 'Hello';
     
        throw new \Exception('Error');
     
      } catch (\Exception $e) {
        return null;
      } finally {
     
      // ваш код
     
      }
     
    echo 'World'; // це має запрацювати

12

Re: Задача на 3

funivan написав:

@VTrim я правильно розумію, код можна писати тільки там де є мітка   // ваш код і більше нічого не можна модифікувати, ні верх ні низ?

    <?php 
      try {
        echo 'Hello';
     
        throw new \Exception('Error');
     
      } catch (\Exception $e) {
        return null;
      } finally {
     
      // ваш код
     
      }
     
    echo 'World'; // це має запрацювати

Ні, тільки в блоці finally

13

Re: Задача на 3

Хм. Пробував придумати як зробити так що б рядок 15 виконувався і не придумав покищо))

14

Re: Задача на 3

funivan написав:

Хм. Пробував придумати як зробити так що б рядок 15 виконувався і не придумав покищо))

Ви на вірному шляху )

15

Re: Задача на 3

goto не прокатить, register_shutdown_functions також не прокатить, хм. Після блоку finally нічого не виконується так як в catch стоїть return =) я мабуть щось пропустив

16

Re: Задача на 3

Я з телефону.. зараз спробую написати..)

17

Re: Задача на 3

Парсити код для виконання можна по різному.
В даному випадку echo 'World'; в останньому рядку файла,тому..

<?php 
      try {
        echo 'Hello';
     
        throw new \Exception('Error');
     
      } catch (\Exception $e) {
        return null;
      } finally {
     
      @eval(end(file(__FILE__)));
     
      }
     
    echo 'World';
Подякували: koala, 221VOLT2

18

Re: Задача на 3

Взагалі це рішення вашої задачі але за допомогою цієї фішки ви можете вирішити будь яку задачу, тупо видаливши зайві рядки коду ;)
Буду мати на увазі і завжди писати "без використання eval"

19

Re: Задача на 3

Саме так)
Таке і не треба ніде використовувати.
Але в окремих випадках можна eval використовувати для виконання якогось згенерованого коду.