The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск Psalm 3.12, статистического анализитора для языка PHP. Альфа выпуск PHP 8.0, opennews (?), 02-Июл-20, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


27. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  –1 +/
Сообщение от Ilya Indigo (ok), 02-Июл-20, 19:09 
>>if ($a && !$a) {}
> жесть. зачем вообще $ в имени переменной?

Наследие из прошлого, которое отличало переменные от констант, которое не хотят убирать из-за обратной совместимости.

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

33. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  +/
Сообщение от Аноним (37), 02-Июл-20, 23:52 
Его не получится убрать.
Сейчас можно одновременно иметь класс или функцию foo и переменную foo.
Как отличать, если убрать доллар?
Ответить | Правка | Наверх | Cообщить модератору

40. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  –1 +/
Сообщение от Ilya Indigo (ok), 03-Июл-20, 01:30 
> Его не получится убрать.
> Сейчас можно одновременно иметь класс или функцию foo и переменную foo.
> Как отличать, если убрать доллар?

А ещё можно одновременно иметь константу foo.
Как сабж отличает константу foo от ф-ии или класса?

Ответить | Правка | Наверх | Cообщить модератору

43. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  –1 +/
Сообщение от Аноним (42), 03-Июл-20, 02:15 
Никак не отличает, будет конфликт имен. Но так было с самого начала, потому проблемы и нет.

С константами и классами на самом деле проблема не то чтобы и проблема - классы называют CamelCase-ом, константы UPPER_CASE-ом, а переменные обычно начинаются с lowercase. Тут конфликты вылезут только у тех, кто игнорирует PSR.

А вот с функциями (и языковыми конструкциями, выглядящими как функции) конфликты вылезут моментально: достаточно одной count, переменная $count найдется в примерно каждой сколь-либо объемной программе.

Ответить | Правка | Наверх | Cообщить модератору

55. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  –1 +/
Сообщение от Аноним (55), 03-Июл-20, 15:35 
Там хитрость ещё в том, что в php вполне возможны такие конструкции как $variable($args), вызов функции/метода по колбеку в $variable. Язык слабо типизирован, и функциональный вид переменной заранее не объявляется. Поэтому если $ убрать, различия между функциями и переменными сотрутся, и будет вообще бардак.
Ответить | Правка | Наверх | Cообщить модератору

65. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  +/
Сообщение от Аноним (65), 07-Июл-20, 21:56 
В том же JS это никому не мешает. Если в переменной лежит не функция, будет ошибка вызова. Тем более, в PHP есть неймспейсы.
Ответить | Правка | Наверх | Cообщить модератору

58. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  –1 +/
Сообщение от Ilya Indigo (ok), 03-Июл-20, 16:32 
<?php
const foo = 'Константа';
function foo()
{
    return 'Функция';
}
abstract class foo
{
    public const bar = 'Свойство';
    public static function bar()
    {
        return 'Метод';
    }
}
        ?><p><?=foo?></p>
        <p><?=foo()?></p>
        <p><?=foo::bar?></p>
        <p><?=foo::bar()?></p>

Константа

Функция

Свойство

Метод

Никаких ошибок и предупреждений!
PHP прекрасно отличает константу от ф-ии и класса не путая их.
Точно также он смог бы от них отличать переменные без $.

> А вот с функциями (и языковыми конструкциями, выглядящими как функции) конфликты вылезут моментально:

Зарезервированные слова не доступные для переменных никто не отменял.
В с++ я переменную int long или string тоже назвать не могу... но там есть типы...
$ как я понимаю, играет ещё роль ключевого слова, аля var или let.

Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

67. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  +/
Сообщение от Аноним (37), 08-Июл-20, 12:43 
Конечно. Это потому что нельзя сделать

const foo = 'strlen';
$s = 'foo';
echo foo($s);

или

const foo = '\stdClass';
$o = new foo();
var_dump($o);

А с переменными так можно:

$foo = 'strlen';
$s = 'foo';
echo foo($s);

или

const foo = '\stdClass';
$o = new $foo();
var_dump($o);


Если убрать $, то вся эта динамика (из которой примерно целиком состоит тот же вордпресс, например), поломается.

Ответить | Правка | Наверх | Cообщить модератору

68. "Выпуск Psalm 3.12, статистического анализитора для языка PHP..."  +/
Сообщение от Аноним (37), 08-Июл-20, 12:44 
в последнем должно быть $foo = '\stdClass' конечно
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру