Говорят, что создание сайта - очень длительный и трудоемкий процесс. Мы скажем - НЕТ! Ведь с новыми технологиями, такими как HTML5, CSS3, PHP и MySql можно быстро и легко научиться создавать сайты любой сложности.
Два сумасшедших веб-мастера покажут где что лежит и как этим пользоваться.
Авторизация
Новый
Забыл
Пожалуйста, заполните поля выше. Это нужно сделать обязательно, иначе ничего не получится.
PHP Статейки /

Основные ошибки PHP-разработчиков

  • Пятница, 23 сентября 2012, 08:55 |
  • Автор: falkovsky |
  • Просмотров: 1528 |
  • Комментарии: 2 |
  • В закладки:
Ошибок очень много, они связаны, как правило, с отсутствием представления о стандартном функционале (копирование стандартных функций), недосмотром в сфере безопасности веб-приложений и пробелами в знаниях синтаксиса языка, с которым сталкивается переводчик. Здесь представлены ошибки, связанные с непониманием работы интерпретатора, в виде 10 конкретных примеров.

1.
$a = 0;
var_dump(in_array($a, array('apple','orange','banana')));


Вернет true (0 == 'apple')

2.
$b = array('a','b','c' );
$c = array(1,2,3);

foreach ($b as $k=>&$v){
        /*
         * Какие-либо операции
         */
        $v.= $v;
}
foreach ($c as $k=>$v){
        /*
         * Какие-либо операции
         */
}


Результатом является замена последнего элемента первого массива на последний элемент второго

3.
if(strpos('a', 'abc')){
        /*
         * Обработка
         */
}


Условие не отрабатывается, так как возвращается позиция символа 0

4.
$str = '3action';
var_dump($str == 3)


Обычно эту ошибку совершают новички, но часто ее делают даже опытные программисты - в основном из-за невнимательности. Вернет true

5.
$array = array ( false=>'a' , 0.1 => 'b', 0.2 => 'c');


Такая ситуация может сложиться при динамическом формировании массивов, в результате которой в массиве будет 1 элемент

6.
$a =1;
echo 'String ' . $a + 1 . ' end';


Выводится строка: 1 end («String 1» == 0)

7.
$db = null;
try {
        $res = mysql_query('SELECT * FROM table' , $db);
}catch (Exception $e){
        throw new Exception('Some message');
}


Продемонстрирована попытка отловить Fatal error при помощи try catch конструкции, которая в конечном итоге оказывается бесполезной

8.
Ошибки ухода в бесконечную рекурсию, которые сложно отловить или они не отображаются вовсе. Эти ошибки приводят к ограничению памяти или лимита времени. Проблему можно решить, установив библиотеки xdebug - они ограничивают рекурсию, настройку можно менять в зависимости от ситуации. xdebug.max_nesting_level = 100,

9.
Непонимание тонкостей работы с массивами
//1.
$a = array ('a' => NULL, 'b' => 2);
// Каков будет результат?
var_dump(isset ($a['a']));


// false

//2.
$array = array(1,'25'=>2,'b'=>3);
$array[] = 'someval';
//Какие ключи и значения будут у элементов?
print_r($array);


//Array ( [0] => 1 [25] => 2 [b] => 3 [26] => someval )

//3.
$a = array (1, 12, 13);
$b = array (11, 'c'=> 12, 13);
/*
Cколько элементов будет в результате выполнения операции,
какие ключи и значения будут у элементов , в каком порядке они хранятся?
*/
print_r($a + $b);


//Array ( [0] => 1 [1] => 12 [2] => 13 [c] => 12 )


10.
Реже встречающиеся ошибки:
class A{
        public function __destruct(){
                file_put_contents('./somefile.txt' ,'sometext');
        }
}
$a = new A();


При использовании unset($a) деструктор отработает и файл соответственно запишется. Но если работа скрипта окончится, то деструктор отработает, но файл вряд ли запишется. Чтобы избежать этой ситуации, необходимо открывать файловый поток заранее или использовать полный путь.
Так же обстоят дела и с session_write_close()
  • Тэги публикации
Добавить комментарий