Showing posts with label shit. Show all posts
Showing posts with label shit. Show all posts

Monday, October 27, 2008

Как я люблю php, или танцы с false

Еще одна из кривостей моего любимого php. Писать не буду, приведу пример интерактивного шела.
Cюрприз #2

pcd@cd-laptop:~$ php -a
php > error_reporting(E_ALL);// устанавливаем уровень ошибок,

php > $ar = array(); // создаем массив
php > var_dump($ar[1]); // обращаемся к несуществующему индексу
Notice: Undefined offset: 1 in php shell code on line 1//логично
NULL

php > $null = null;// создаем переменну инициализированную нулом
php > var_dump($null[1]);// обращаемся к нему как к массиву
NULL// ошибки нет, это уже не совсем логично, т.к.

php > var_dump( (array) $null ) ; // при преобразовании нула в массив
array(0) {
}// получается пустой массив без индекса 1.
//ну хотя можно как то объяснить, т.к. null это особый тип.

php > $false = false;// boolean переменная, инициализированная ложью
php > var_dump($false[1]);// обращение как к массиву при этом к несуществующиему индексу
NULL// а как объяснить это????

php > var_dump((array)$false);// смотрим как ложь приводится к массиву.
array(1) {
[0]=>
bool(false)
}// этого я не ожидал
// но тогда получается что ...

php > echo (array) false ? 'true' : 'false';
true // ну а это просто п***ц, сколько человек могло попасть так!


Ну и навскидку надуманный пример, похожий на правду.



cd@cd-laptop:~$ cat ex1.php
class ExampleDb
{

/**
* This function return list of users as array,
* empty array on failure
*/
public function findAll($testValue = true)
{
return (array ) $this->_fetch_all($testValue);
}
protected function _fetch_all($testValue = true )
{
$goodData = array(
0 => array(
'name' => 'vasya',
'pass' => 'oyamd5withsolt',
),
1 => array(
'name' => 'vasay',
'pass' => 'oyamd5withsolt2',
),
);
try
{
;//do smth
}
catch (Exception $e)
{
return false; //strange architector
}

$retValue = $testValue ? $goodData : false;
var_dump($retValue);
return $retValue;

}
}

$ob = new ExampleDb();
$users = $ob->findAll(false);// error happens !

//strange dev
if ( isset($users[0]) )
echo "You win! Your prize 10000k euros from dev salary!";


?>
cd@cd-laptop:~$ php ex1.php
(bool)false // мы видим что была ошибка
You win! Your prize 10000k euros from dev salary!cd@cd-laptop:~$
// но тем не менее кто то выйграл.
//Ну что теперь 10 лет работаем на еду?

Wednesday, March 21, 2007

Первый пост

Первый пост ради теста
Занес, глянул, а там уже тест то был :)
Цель создания : скидывать неожиданные находки, мои личные открытия.
Тематика :
Книги
Музыка
web development (php, perl)
 
Каталог сайтов, Добавить сайт