Здравствуйте, уважаемые Знающие люди. Простите если я не туда разместил свой вопрос — делаю это впервые.
Вот я создал класс, который позволяет, как мне кажется, удобнее работать со списками данных. Удобство заключается в том, что объект в большинстве методов возвращает сам себя, что позволяет далее с ним играть. Используя Zend for Eclipse и комментарии к методам return asList я получаю кайф при работе со списками данных. Пример:
Возвращает:
Для javascript это нормально когда объект возвращает сам себя, но по какой-то странной причине я не смог обнаружить в том же google подобных классов на PHP. Это заставило задуматься может я чего-то не так делаю? Может такая реализация имеет большой проигрыш по скорости или ест много ресурсов? Вопрос к специалистам, стоит ли использовать такой подход (и кстати, как он правильно называется?)
Ниже идёт код класса.
Вот я создал класс, который позволяет, как мне кажется, удобнее работать со списками данных. Удобство заключается в том, что объект в большинстве методов возвращает сам себя, что позволяет далее с ним играть. Используя Zend for Eclipse и комментарии к методам return asList я получаю кайф при работе со списками данных. Пример:
$obj = new asList; print_r( $obj-> set(array("my"=>"lol","dear"=>"rofl","mom"=>"hehe"))-> intersect("hello,my,dear,friend")-> merge("test,yo")-> fillValuesFrom(array("yo"=>"good test"))-> asArray() );
Возвращает:
Array ( [my] => [dear] => [test] => [yo] => good test )
Для javascript это нормально когда объект возвращает сам себя, но по какой-то странной причине я не смог обнаружить в том же google подобных классов на PHP. Это заставило задуматься может я чего-то не так делаю? Может такая реализация имеет большой проигрыш по скорости или ест много ресурсов? Вопрос к специалистам, стоит ли использовать такой подход (и кстати, как он правильно называется?)
Ниже идёт код класса.
<?php /** * Associative List class * */ class asList { private $_data; /** * New associative list * * @param array||string $data (optional) * @param string $clue (optional), if $data type == string */ function __construct($data = NULL, $clue = ",") { if (! is_null ( $data )) $this->set ( $data, $clue ); } /** * Private function to convert array||string to array * * @param array||string $array_or_string * @param string (optional) $clue * @return array */ private function _toArray($array_or_string, $clue = ",") { if (is_array ( $array_or_string )) { $array = $array_or_string; } elseif (is_string($array_or_string)) { $array_or_string = trim ( $array_or_string, $clue . " " ); $keys = @explode ( $clue, $array_or_string ); $array = array_fill_keys ( $keys, '' ); } if (!is_array($array)) $array = array(); unset ( $array [""] ); //data[] not allowed return $array; } /** * Set data to work with * * @param arr||str $array_or_string * @param string $clue * @return asList */ public function set($array_or_string, $clue = ",") { $array = $this->_toArray ( $array_or_string, $clue ); $this->_data = $array; return $this; } /** * Export data as array * * @return array */ public function asArray() { return $this->_data; } /** * Export data keys as string * * @param string (optional) $clue * @return string */ public function asString($clue = ",") { return @implode ( $clue, @array_keys ( $this->_data ) ); } /** * Make string using $form * * @param string $selected * @param string $form - use <key> <value> <selected> to place keys, values, selected string * @param string $clue * @return string */ public function asStringAdvanced($selected = NULL, $form = "<option value='<key>'<selected>><value></option>", $clue = NULL ) { $data = (is_array($this->_data)) ? $this->_data : array(); while (list($key,$val) = each ($data) ) { $data [$key] = str_replace ( array ("<key>", "<value>", "<selected>" ), array ($key, $val, ($key == $selected) ? " selected" : "" ), $form ); } reset ( $data ); return @implode ( $clue, $data ); } /** * Merge data with another data * * @param arr||str $array_or_string * @param string(optional) $clue * @return asList */ public function merge($array_or_string, $clue = ",") { $array1 = (is_array($this->_data)) ? $this->_data : array(); $array2 = $this->_toArray ( $array_or_string, $clue ); $this->_data = array_merge($array1,$array2); unset ( $this->_data [""] ); //data[] not allowed return $this; } /** * Intersect data with another data * If array, forgot about it's keys, only values willbe used * * @param arr||string $array_or_string * @param string (optional) $clue * @return asList */ public function intersect($array_or_string, $clue = ",") { if (! is_array ( $array_or_string )) { $array = $this->_toArray ( $array_or_string, $clue ); $array = array_keys ( $array ); } else { $array = array_values ( $array_or_string ); } foreach ($array as $val) { if ( isset($this->_data[$val]) ) $ret[$val] = $this->_data[$val]; } $this->_data = $ret; return $this; } /** * Fill data with datas from $array * * @param array $array - associative array where to get new data from * @param bool $preserve_original_if_not_exists - preserves original value if new array have no such key * @return asList */ public function fillValuesFrom($array, $preserve_original_if_not_exists = true) { while ( list ( $key, ) = @each ( $this->_data ) ) { if ($preserve_original_if_not_exists && ! array_key_exists ( $key, $array )) { //preserve original } else { $this->_data [$key] = $array [$key]; } } reset ( $this->_data ); return $this; } /** * Remove data with given keys * If array in argument, values willbe used for list of keys to be removed * * @param arr||string $array_or_string - list of keys * @param string (optional) $clue * @return asList */ public function remove($array_or_string,$clue=",") { if (! is_array ( $array_or_string )) { $array = $this->_toArray ( $array_or_string, $clue ); $array = array_keys ( $array ); } else { $array = array_values ( $array_or_string ); } foreach ($array as $item) { unset ($this->_data[$item]); } return $this; } public function exists($key) { return (isset($this->_data[$key])) ? true : false; } } ?>