Я обнаружил, что шаблон интерфейса> Аннотация> Конкретный работает в следующем прецеденте:
1. You have a general interface (eg IPet)
2. You have a implementation that is less general (eg Mammal)
3. You have many concrete members (eg Cat, Dog, Ape)
Абстрактный класс определяет общие атрибуты по умолчанию для конкретных классов, но обеспечивает интерфейс , Например:
public interface IPet{
public boolean hasHair();
public boolean walksUprights();
public boolean hasNipples();
}
Теперь, поскольку у всех млекопитающих есть волосы и соски (AFAIK, я не зоолог), мы можем перевернуть это в абстрактный базовый класс
public abstract class Mammal() implements IPet{
@override
public walksUpright(){
throw new NotSupportedException("Walks Upright not implemented");
}
@override
public hasNipples(){return true}
@override
public hasHair(){return true}
И тогда конкретные классы просто определяют, что они идут вертикально.
public class Ape extends Mammal(){
@override
public walksUpright(return true)
}
public class Catextends Mammal(){
@override
public walksUpright(return false)
}
Этот дизайн хорош, когда есть много конкретных классов, и вы не хотите поддерживать шаблон, чтобы запрограммировать интерфейс. Если к интерфейсу были добавлены новые методы, это сломало бы все результирующие классы, поэтому вы все равно получите преимущества интерфейса.
В этом случае абстрактный может быть также конкретным; однако абстрактное обозначение помогает подчеркнуть, что эта модель используется.
// Create an empty array for the encoded resultset
$rows = array();
// Loop over the db resultset and put encoded values into $rows
while($row = mysql_fetch_assoc($result)) {
$rows[] = array_map('utf8_encode', $row);
}
// Output $rows
echo json_encode($rows);
В вашем соединении: mysql_set_charset('utf8', $link);
Пример:
<?php
$link = mysql_connect('localhost', 'your_user', 'your_password');
mysql_set_charset('utf8', $link);
$db_selected = mysql_select_db('your_db', $link);
...
Надеюсь, что несколько помогает.
foreach( $row as $value ) {
$value = utf8_encode( $value );
Фактически вы не записываете свое закодированное значение обратно в массив $ row
, вы меняете только локальную переменную $ value
. Если вы хотите написать ответ при изменении переменной, вам нужно будет рассматривать ее как ссылку:
foreach( $row as &$value ) {
Лично я бы попытался избегать ссылок, где это возможно, и для этого случая вместо этого используйте array_map
, как указано пользователя Kemo.
Или mysql_set_charset
в UTF-8, чтобы получить возвращаемые значения в UTF-8 независимо от фактических сопоставлений таблиц, в качестве первого шага к миграции приложения в UTF-8.