PHP класс для отправки ответа на вспышки


Я создал этот код, чтобы отправить ответ на вспышки, которые могут быть обработаны с AS2/AS3 на:

<?php
    /**
     * Basic server-side API controls for Flash-PHP communication
     * @author Marty Wallace
     * @version 1.0.2
     */
    class API
    {
        // MySQL
        private $con;
        private $sql_hostname = '';
        private $sql_username = '';
        private $sql_password = '';
        private $sql_database = '';

        // Properties
        public $response;

        /**
         * Constructor
         */
        public function __construct()
        {
            // Attempt connection
            $this->con = mysql_connect(
                $this->sql_hostname,
                $this->sql_username,
                $this->sql_password
            );

            // Connection could not be established
            if(!$this->con)
            {
                $this->response = array(
                    "status" => "no_connection",
                    "message" => "Could not connect to MySQL, try again later."
                );

                $this->respond();
            }

            // Select database
            mysql_select_db($this->sql_database);
        }

        /**
         * Send response back to Flash
         */
        public function respond()
        {
            $ar = array();
            foreach($this->response as $key => $value)
                array_push($ar, $key . "=" . $value);

            die(implode("&", $ar));
        }
    }
?>

Я не особо с PHP и ответить() функция, кажется, что это может быть написано немного лучше.. какие будут предложения?



333
3
php
задан 20 июля 2011 в 05:07 Источник Поделиться
Комментарии
2 ответа

Я использовал PHP для несколько лет, и вот мои предложения:

array_push() может использоваться, чтобы добавить несколько значений в массив сразу, но в вашем случае, ваш толкает только одно значение за раз, что означает вы можете использовать:

$АР[] = $ключ . "=" . $значение

Это также должно ускорить ваш код немного( что лучше использовать в PHP $массив[] = $value или array_push($массив, $значение)?).

умереть() обычно используется, когда есть ошибка. Он выплевывает сообщение для пользователя. Если вы используете этот код, чтобы подключиться к базе данных MySQL, то изменения умрет(взорвется("&", $ар)); к Эхо(лопаются("&", $АР));

Но, честно говоря, вы должны быть в состоянии вынуть отвечать() функция, если вы только использовать его, чтобы отправить массив на флэш.

        // Connection could not be established
if(!$this->con)
{
$this->response = array(
"status" => "no_connection",
"message" => "Could not connect to MySQL, try again later."
);

echo(implode("&", $this->response));
}

3
ответ дан 5 января 2012 в 07:01 Источник Поделиться

Во-первых, вы, кажется, не используя базы данных, однако для моего ответа я предполагаю, что вы используете его в другом месте в классе.

С ООП это хорошо, чтобы использовать инъекцию зависимостей. Внедрение зависимостей позволяет гарантировать, что объекты, которые вы создаете, только отвечать за то, что они должны быть.

Обратите внимание, как ваш объект API в настоящее время отвечает за создание подключения к базе данных. Давайте посмотрим на плюсы и минусы для этого:


  • Плюсы - я их не вижу (к сожалению), хотя можно сказать, что все делается в одном месте для объектного API (я вижу это как недостаток).

  • Минусы - тесно связан с базой данных MySQL, API для объекта несет ответственность за действия, использование mysql_*, которая сейчас мягко устарела, дублирование кода для базы данных действий, пароль соединения деталей, разбросанных по классам, а не быть в одном месте.

Вот как ваш код будет выглядеть с помощью инъекции зависимостей:

class API
{
protected $db;

/**
* Constructor
*/
public function __construct($db)
{
$this->db = $db;
}

/**
* Send response back to Flash
*/
public function respond()
{
// This is rewritten as Chillie suggested.
$ar = array();
foreach($this->response as $key => $value)
$ar[] = $key . "=" . $value;

echo implode("&", $ar);
}
}

Я бы обрабатывать ошибки подключения к базе данных на уровне использования:

try
{
$FlashResponder = new API(new PDO($dsn, $user, $password));
}
catch (Exception $ex)
{
echo "status=no_connection&message=Could not connect to database, try again later.";

}

Внедрение зависимостей позволяет любой базы данных, который будет использоваться объект API. Когда детали подключения к базе данных изменений или новой базы данных должен быть подключен к ценности больше не жестко в класс API облегчает техническое обслуживание. Код для класса API также проще, так как код базы данных, что делает его труднее читать и понимать.

0
ответ дан 5 апреля 2012 в 03:04 Источник Поделиться