Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
1

Задачка. Верно ли

20.02.2016, 01:35. Показов 524. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Верно ли что можно однозначно заменить следующие части кода
PHP
1
!!
на
PHP
1
(bool)
PHP
1
__LINE__
на текущую линию
PHP
1
__FUNCTION__
(при условии что функция не анонимна)
на полный __NAMESPACE__ . (имя функции/или '' если в не функции)
PHP
1
__FUNCTION__
классы/трейты(при условии что это не метод анонимного класса)
на имя метода/трейта

PHP
1
__METHOD__
если внутри не анонимной функции {
на полный __NAMESPACE__ . (имя функции)
}
если внутри метода не анонимного класса {
на полный __NAMESPACE__ . (имя класса) . '::' . (имя функции)
}
если внутри трейта {
на полный __NAMESPACE__ . (имя трейта) . '::' . (имя функции)
}
если в не функции/класса на ''
PHP
1
__NAMESPACE__
на полный __NAMESPACE__

PHP
1
$var = (__exp1) ? (__exp2) : (__exp3);
на
PHP
1
2
3
4
5
if ( (__exp1) ) {
  $var = (__exp2);
} else {
  $var = (__exp3);
}
PHP
1
$var = (__exp1) ?:(__exp2);
на
PHP
1
2
3
4
5
if ( $tmp= (__exp1) ) {
  $var = $tmp;
} else {
  $var = (__exp2);
}

PHP
1
$var = (__exp1) ?? (__exp2);
на
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifmeta (VAR_TYPE(__exp1))
  if ( ( $tmp= (__@(__exp1)) ) !== null ) {
    $var = $tmp;
  } else {
    $var = (__exp2);
  }
#elseifmeta
  if ( ( $tmp= (__exp1) ) !== null ) {
    $var = $tmp;
  } else {
    $var = (__exp2);
  }
#endif
// под __exp* подразумевается выражение exp
// под __@ подавление верхних ошибок с глубиной погружения = 1 ( то есть __@f( $p )->attr если несуществует $p вызовет нотайс но если не будет attr сво-а ошибка не выскочит.
// под __ifmeta подразумевается тип конструкции ( например (a()->f)()->op - Это все тип вар , а ($a + 2) - Уже выражение
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2016, 01:35
Ответы с готовыми решениями:

как сделать чтобы на label1 выходило значение верно или не верно?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int...

Как мне сделать чтобы на label1 выходило значение верно или не верно?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int...

ДМ. Логически доказать равенство; и что вложение верно, а обратное не верно; построить формулу
Здравствуйте, я понимаю, что тут не любители отвечать очередному Васе Пупкину. Но всё-же, буду очень признателе, если мне напишут...

6
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
20.02.2016, 02:29 2
1) нельзя
PHP
1
2
3
4
class A {};
$a = new A;
var_dump(!!$a instanceof A); // true
var_dump((bool)$a instanceof A); // false
Добавлено через 17 минут
2) при использовании eval могут не совпадать, но это "не спортивно", может еще что потом придумаю
PHP
1
2
3
4
5
<?php
$str = 'echo __LINE__;';
$str1 = 'echo 3;';
eval($str); // 1
eval($str1); // 3
0
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
20.02.2016, 02:46  [ТС] 3
Jewbacabra, очень интересно.
однако это не совсем так.
PHP
1
2
3
4
5
<?php
$str = 'echo __LINE__;';
$str1 = 'echo 3;';
eval($str); // 1
eval($str1); // 3
строки в принципе не рассматриваются. рассматриваются только php Токены
PHP
1
2
3
4
class A {};
$a = new A;
var_dump(!!$a instanceof A); // true
var_dump((bool)$a instanceof A); // false
да это верный пример. однако я не полностью описал условие.
приоритет операторов роли не играет т.к. разбирается полностью дерево. и в
PHP
1
var_dump(!!$a instanceof A); // true
будет не простая замена строки, а замена оператора параметром которого будет уже сформированное выражение ($a instanceof A)
иначе говоря на выходе соберется следующее
PHP
1
var_dump((bool)($a instanceof A)); // false
Добавлено через 9 минут
----------------------------------------------
для того чтобы легче было понять про что я(говоря про выражения и дерево) приведу дерево
выражения
PHP
1
var_dump(!!$a instanceof A);
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    [1] => Expr\FuncCall Object
        (
            [name] => Name Object
                (
                    [parts] => Array
                        (
                            [0] => var_dump
                        )
                )
            [args] => Array
                (
                    [0] => Arg Object
                        (
                            [value] => Expr\BooleanNot Object
                                (
                                    [expr] => Expr\BooleanNot Object
                                        (
                                            [expr] => Expr\Instanceof_ Object
                                                (
                                                    [expr] => Expr\Variable Object
                                                        (
                                                            [name] => a
                                                        )
 
                                                    [class] => Name Object
                                                        (
                                                            [parts] => Array
                                                                (
                                                                    [0] => A
                                                                )
                                                        )
                                                )
                                        )
                                )
                            [byRef] => 
                            [unpack] => 
                        )
 
                )
        )
)
Добавлено через 2 минуты
то есть обходя все возможные ветви ищем где Expr\BooleanNot сразу в Expr\BooleanNot и меняем их на booleanCast
а в него подставляем подвыражение. таким образом приоритет операторов роли не играет.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
20.02.2016, 08:41 4
Цитата Сообщение от Jewbacabra Посмотреть сообщение
PHP
1
2
3
4
class A {};
$a = new A;
var_dump(!!$a instanceof A); // true
var_dump((bool)$a instanceof A); // false
Цитата Сообщение от WhiteMind Посмотреть сообщение
да это верный пример.
Нет, это неверный пример.

У оператора (bool) приоритет больше чем у операции instanceof. У оператора instanceof приоритет больше чем у операции "!". В первой строке сначала выполняется оператор (bool) и только потом instanceof. Во второй строке сначала выполняется оператор instanceof и только затем оператор "!".
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class A {};
$a = new A;
 
$a1 = !!$a;
$a2 = (bool)$a;
 
var_dump($a1 instanceof A); // false
var_dump($a2 instanceof A); // false
 
// или
 
var_dump((!!$a) instanceof A); // false
var_dump(((bool)$a) instanceof A); // false
Так что !!$a и (bool)$a (при отсутствии всяких прочих условий) это одно и то же.

Да и вообще все что описано автором в первой строке справедливо. Интересно откуда это все взялось конечно и для каких целей...
0
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
20.02.2016, 11:06  [ТС] 5
Цитата Сообщение от pav1uxa Посмотреть сообщение
Нет, это неверный пример.
я написал это чтобы сказать что если есть простая замена строки то приоритет разный
дальше я показал на примере что если мы используем полный разбор дерева это не так. приоритет значения не имеет.

Добавлено через 3 минуты
Цитата Сообщение от pav1uxa Посмотреть сообщение
Интересно откуда это все взялось конечно и для каких целей...
Изначально я хотел написать полностью однозначный транслятор операторов "??" нашел на гитхабе либу phpparser пока писал транслятор в итоге однозначным получился только обфусикатор кода. его я и хочу доделать.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
20.02.2016, 12:58 6
Цитата Сообщение от WhiteMind Посмотреть сообщение
я написал это чтобы сказать что если есть простая замена строки то приоритет разный
Ну так неправильно рассуждать. Это я даже если одно логическое выражение засуну в разные контексты то оно уже по разному будет интерпретироваться. О чем тогда вообще говорить, легче просто сказать что если хоть 1 символ отличается то и выражение отличается.
0
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
20.02.2016, 19:25  [ТС] 7
кстати говоря. не описанная выше магическая константа
PHP
1
__CLASS__
единственная кто не позволяет делать прямой реплайс по мимо анонимных классов на этапе разбора файла( ну кроме __FILE__ и __DIR__ т.к. не известно где будет запускаться
PHP
1
__CLASS__
на
__NAMESPACE__.(имя класса) если класс не анонимный ,
на __NAMESPACE__.(имя класса) класса если класс вызывает трейт в котором ранее __CLASS__ был объявлен
пример:
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
<?php
 
trait TR {
    public function T_F() {
        echo 'Trait: '.__CLASS__ . "\n";
    }
}
 
abstract class CL {
    use TR;
    public function C_F() {
        echo 'Class: '.__CLASS__ . "\n";
    }
}
 
class NL extends CL {
    public function N_F() {
        echo 'Class: '.__CLASS__ . "\n";
    }
}
 
$n = new NL;
$n->T_F();
$n->C_F();
$n->N_F();
выведет
PHP
1
2
3
Trait: CL
Class: CL
Class: NL
http://sandbox.onlinephpfuncti... 7aeedd2dcb

Добавлено через 6 часов 8 минут
хм.
вот что вышло.
http://whitemind.freevar.com/magic.php
замена почти всех констант(кроме __FILE__, __DIR__ и в некоторых случаях констант __CLASS__ и __METHOD__ в анонимных функциях и трейтах)
+ ко всему все константы вычисляются( до насколько я знаю php7 этого не делалось)

Добавлено через 30 секунд
надо найти ошибки. мб есть не соответствие
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2016, 19:25
Помогаю со студенческими работами здесь

Задачка с массивом и задачка с формулами Ньютона и Лагранжа
Прошу помочь решить две задачи

Задачка так задачка
Здравствуйте, Ломаю голову, но ни как не могу прийти к решению. Задача следующая: К примеру есть некий адрес в столбце &quot;624205,...

Верно ли?
Программа составлена по задаче : Дан числовой массив A размера N. Сформировать новый массив B того же размера по следующему правилу:...

Не верно считает
Вот сам код программы. Что там не так? Считает, а ответ выдает вне зависимости каждый раз один и тот-же -9,25596е+061 вот сама...

Перенаправление не верно
Задал свой вопрос в старой теме, потом понял, что для одного вопроса одна тема. Беда с перенаправлением, со странице надо...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Простая нейросеть на КуМир: Создание и обучение
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
Исполнитель Водолей в КуМир: Решение задач
EggHead 16.03.2025
Разработка алгоритмического мышления — одна из ключевых задач для начинающих программистов, и система КуМир предлагает отличный способ погрузиться в этот процесс. Среди множества исполнителей в этой. . .
Исполнитель Чертежник в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы можете рисовать на бесконечной координатной плоскости, перемещая точку, которая оставляет след. По вашей команде она может поднять перо и двигаться, не оставляя следа, или. . .
Исполнитель Робот в КуМир: Решение задач
EggHead 16.03.2025
КуМир (Комплект Учебных МИРов) — это учебная среда программирования, разработанная специально для обучения базовым концепциям алгоритмизации. Её главная фишка — использование русскоязычного. . .
Исполнитель Черепаха в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы впервые учитесь программировать, а перед вами стоит задача заставить маленькую виртуальную черепашку рисовать на экране. Звучит забавно? Эта идея зародилась ещё в 1967 году, когда. . .
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru