Автор Тема: php  (Прочитано 2317 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн inter

  • Царь
  • Крутой чатланин
  • *****
  • Сообщений: 1677
  • Пол: Мужской
    • Email
php
« : 30 Май 2012, 10:56:32 »
Мысли вслух.  :police:


Я стал недолюбливать язык программирования php. Дело в том, что раньше мне было все равно на чем делать сайты, а сейчас я начинаю задумываться - почему так по идиотски сделан этот язык:

<?php
echo 'php shit' 2// 2

<?php
$a 
'beer';
$b 0;
var_dump($a == true && $b == false && $a == $b); // true



Названия функций:
Пример - str_repeat и strpad. Почему во второй функции нет разделителя как в первой?!

Или еще:

file_exists
fopen
readfile

не лучше ли: File::exists, File::open, File::read? Это конечно можно сделать самому, но оно будет медленно работать и переписывать все функции долго и нудно. Почему сделали PDO, а старые функции не переделали в классы?




Int
<?php
$num 
intval($num);
$num = (int) $num;

А не проще было бы:
<?php
$num 
int($num);



Языковая конструкция list

Код на php:
list($a, $b, $c) = array(1, 2, 3);
Код на python:
a, b, c = 1, 2, 3


Array
Эти два кода делают одно и то же:
1.
<?php
$parents_id 
array_merge($parents_id, [$parent_node['id']]);
2.
<?php
array_push
($parents_id$parent_node['id']);

Нет однообразия - у каждой функции значение возвращается по разному - попробуй запомни!


Array + Array
Сложение двух массивов

Python:
[1,2,3] + [4,5,6]
вернёт [1, 2, 3, 4, 5, 6]

PHP:
[1,2,3] + [4,5,6]
вернёт  [1, 2, 3]

:facepalm:



ArrayObject:
<?php
$ary 
= new ArrayObject(['one''two'100500]);
// ArrayObject Object ( [storage:ArrayObject:private] => Array ( [0] => one [1] => two [2] => 100500 ) ) 

$ary->append('Tweety');
// ArrayObject Object ( [storage:ArrayObject:private] => Array ( [0] => one [1] => two [2] => 100500 [3] => Tweety ) ) 

$ary2 = ['one''two'100500];
// Array ( [0] => one [1] => two [2] => 100500 )

$ary2->append('Tweety');
// Fatal error: Call to a member function append() on a non-object in



И ещё примерчик:
<?php

$testArray 
= array(=> 'Первый''second' => 'Второй'=> null);
 
var_dump(isset($testArray[3]));              // => bool(false)
var_dump(array_key_exists(3$testArray));   // => bool(true)



Константы

Так работает:
<?php

define
('DOCROOT'realpath(dirname(__DIR__)));

Так НЕ работает:
<?php

const DOCROOT realpath(dirname(__DIR__));

Так РАБОТАЕТ
<?php

define
('DOCROOT'realpath(dirname(__DIR__)));
const 
DOCROOT2 DOCROOT;

В php 5.6 этот маразм решили и второй вариант заработал, но php 5.6 ещё не вышел, а лишь тестируется
Маразм остался.



function
foreach

Зачем клаву мучать? Если php создан благодаря perl, то в perl сейчас вместо function и foreach есть sub и for соответственно.



Аргументы функций

array array_map ( callable $callback , array $array1 [, array $... ] )

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

Могли бы $callback сделать первым аргументом в array_filter, чтоб не путаться.



Сортировка массивов

Названия функций сортировки в php разнообразны:

Цитата
array_multisort, array_rand, array_walk, arsort, asort, asort, krsort, ksort, natcasesort, natsort, rsort, shuffle, sort, uasort, uasort, uksort, usort



Может в обозримом будущем появится нормальный язык программирования?

Кстати, кому интересно - почитайте о кривизне самого популярного веб языка php: http://habrahabr.ru/post/142140/

<?php

echo in_array("foobar", array(0)) === true// 1

Ещё статья Почему PHP отстой
« Последнее редактирование: 03 Декабрь 2016, 10:30:41 от inter »