ПредишенСледващото

След като се сблъскват с един любопитен проблем: при обработката масиви функция, причинена array_walk екип. вместо да се налага да се провери за масив, реших да потискат съобщение за грешка, ако има масив. Както се казва, не е решение. Масивът не е задължителна част от данните, тя може да бъде създаден в резултат на предишния код, или не може да бъде в зависимост от различни условия. Ако има, обработка на масив, без да дава съобщение за грешка. Затова реших да не проверява за наличието на масив, както и да постави в array_walk куче за опростяване на кода.

Бях много изненадан, когато разбрах, че масивът е престанал да бъде обработена.

Поглеждам аз, този тест код:

На първо място, аз пиша error_reporting (E_ALL). така че независимо от настройките на сървъра, вижте PHP грешки. На следващо място, аз създаде функция, за да се присъедини към словния елемент на масива. С това, тъй като масива се предава чрез препратка, функцията трябва да се промени на масива, и не се предава копие от него. Но, за всеки случай (по-добре безопасно, отколкото nedobdet), да направи проверка на дисплея на функция.

На следващо място, да създам 3 тест масив с набор от думи и за всяка обработка на повикване отбор функция array_walk. Но в първия случай аз използвам array_walk в чист вид, но в следващите две с помощта на потискането на съобщение за грешка, ако посочения масив не е там. В този случай, в един вариант, сложих кучето пред извикване на функция, а другият пред името на масив. Отначало ми се стори, че тя дава един и същ резултат. За да тествате Донесох масива след преработка в рамките на блока

.

И след това, по същия начин, причинил обработката на съществуващата масив, наречен лечение на несъществуващи, за да видите дали съобщението за грешка е наистина потиснати.

И аз имам този линк:

Вътре в напитката разполага всичко мина по план. PHP е готова да се пие, чай, мляко и дори бира. Най-малко на дисплея в зависимост отговаря на предвидимия един. Но в действителност се оказа, че той и Филон тайно налива уиски под масата, защото при проверка на масива чрез print_r. думата "напитка" не е страна, нито бира или уиски.

Защо се случва това, аз напълно разбирам. В действителност, в самата функция всичко изглеждаше страхотно, независимо от позицията на кучето в поканата.

Това бе последвано от проверка на потискане на грешка. Повикване обработка несъществуваща масив без куче очаквано даде съобщение за грешка "аргумент трябва да бъде масив." Call обработка префикс куче очаквано мълчи за грешката. Но какво се случва, когато се обадите на кучето пред множество предварително не е известен. Дали ще го PHP, като риба, тъй като те нямат право да говоря с него масив, или да започнат да се оплакват, че доводът, трябва да бъде масив. Оказа се, за да се оплаче. Оплаква ако масивът не е така. Тя симулира обработката, ако масивът е. Това означава, че кучето стаята на масива не само забранява съобщението за грешка, но също така и много води до грешка при обработката на данните.

Кучета само стая преди да се обадите на функцията дава желания резултат, ако има масив, той се лекува, ако не е, PHP мълчаливо минава.

На последно място, бих искал да добавя, че вместо array_walk в повечето случаи е по-добре да се използва array_walk_recursive. които ще се справят не само обикновените масиви, но и многоизмерен, с всичките си нива на влагане. По-добре използвайте array_walk_recursive скоро, отколкото по-късно, в случай на множество промени, проверете дали тя се обработва рекурсивно.

Подкрепете проекта - споделете линка, благодаря!