Когато си помислиш, че няма какво да те изненада *RUBY
Jul 12

Аrray в PHP беше нещото което най-много ми хареса в php когато започвах да се занимава с програмиране. С времето обаче разбрах че array са много странно нещо, те са кръстоска между стандартния масив и hash таблици. По този въпрос има много материали в Интернет, където се казват плюсовете и минусите. Но това което искам се га да покажа е малко по различен поглед към Array.

Обикновено аз както и голяма част от PHP дивелопърите ползваме масивите или как нормален масив или като hash таблица, но много рядко като смесено нещо. Но при определени ситуации е доста полезно да се ползват като и двата типа на работа.

Например имам едни класове с който си дефинирам таблиците в базата данни и те генерират sql код и т.н.:


$this->createTable('product_brands', array(
	'name'	=> array('string', 'limit' => 7),
	'ord'		=> 'int',
	'visible'	=> 'boolean',
));

Което за мен и моите колеги е доста ясно и разбираемо. Още повече че самото “разчитане” на типа на всяка колона е много лесно:


function column($name, $options){
	$options = (array) $options;
	$type	 = isset($options['type']) ? $options['type'] : $options[0];

	// ....
}

Друго място на което ги ползвам е в един метод класа ми за работа с базиданни:


// WHERE visible = '1'
$db->where("'visible'='1'");
// WHERE category_id = '$id' AND visible = '1'
$db->where(array('category_id'	=> $id, 'visible' => 1));
// WHERE name LIKE '%{$name}%' AND category_id = '$id' AND visible = '1'
$db->where(array("name LIKE '%{$name}%'", 'category_id'	=> $id, 'visible' => 1));

Като where трябва да върне sql условие. А самия where метод е доста простичко написан:


function where($cond) {
	if (!$cond)
		return '';

	if (!is_array($cond))
		return 'WHERE ' . $cond . ' ';

	$vals = array();
	foreach($cond as $field => $value) {
		$vals[] = is_numeric($field) ? $value : $field . '=' . $this->quote($value);
	}

	return 'WHERE ' . join(' AND ', $vals) . ' ';
}

update: Сега се сетих, че може array да се ползват по подобен начин и в новата версия на tag функцията ми, с която генерирам html код:


// <a href="myLink">some</a>
tag(array('a', 'href' => 'myLink', 'some');
// <a href="myLink">some</a>
tag(array('a', 'some', 'href' => 'myLink');
// <span>text</span>
tag(array('span', 'text');
// <img src="image.png" alt="" />
tag(array('img', 'src' => 'image.png', 'alt' => '');

п.п. доста от тези примери ще изглеждат още по-добре ако се сбъднат желанията ми от PHP6 whishlist ( особено точки 4 или 7 ).

Comments are closed.