public function test_substr() { //echo mb_internal_encoding(); $this->assertEquals(Core_Strings::substr('string', 2), 'ring'); $this->assertEquals(Core_Strings::substr('string', 2, 2), 'ri'); $this->assertEquals(Core_Strings::substr('string', 2, 1), 'r'); // $enc = mb_internal_encoding(); // mb_internal_encoding("UTF-8"); // echo mb_internal_encoding(); $this->assertEquals(Core_Strings::substr('Яблочный сироп', 2, 3, 'UTF-8'), 'лоч'); // mb_internal_encoding($enc); }
/** * Преобразует значение полученное из БД в нужный формат, для работы с ним в php * * @param DB_ColumnMeta $metadata * @param $value * * @return mixed */ public function cast_column(DB_ColumnMeta $metadata, $value) { switch (true) { case $metadata->type == 'date': return is_null($value) ? null : Time::parse($value); case $metadata->type == 'timestamp': return is_null($value) ? null : Time::parse($value); case Core_Strings::starts_with($metadata->type, '_'): $arr = array(); foreach (explode(',', Core_Strings::substr($value, 1, strlen($value) - 2)) as $element) { $arr[] = $this->cast_column(new DB_ColumnMeta($metadata->name, Core_Strings::substr($metadata->type, 1), $metadata->length, $metadata->precision), ltrim(rtrim($element, '"'), '"')); } return $arr; case Core_Strings::starts_with($metadata->type, 'int'): return (int) $value; case in_array($metadata->type, array('varchar', 'text')): return (string) $value; case in_array($metadata->type, array('numeric', 'double', 'float')): return (double) $value; default: return $value; } }
/** * @param string $method * @param array $args * * @return mixed */ public function __call($method, $args) { if (Core_Strings::ends_with($method, '_url')) { $redirect = false; // TODO: Ugly hack, needs refactoring if (Core_Strings::starts_with($method, 'redirect_to_')) { $redirect = true; $method = Core_Strings::substr($method, 12); } $parms = array(); foreach ($this->completion_parms as $name) { if (isset($this->request[$name])) { $parms[$name] = $this->request[$name]; } } if (count($args) && is_array($args[count($args) - 1])) { if (count($parms)) { $args[count($args) - 1] = Core_Arrays::merge($parms, $args[count($args) - 1]); } } else { if (count($parms)) { $args[] = $parms; } } $url = method_exists($this->urls, $method) ? Core_Types::reflection_for($this->urls)->getMethod($method)->invokeArgs($this->urls, $args) : $this->urls->__call($method, $args); return $redirect ? $this->redirect_to($url) : $url; } else { throw new Core_MissingMethodException($method); } }