Примите во внимание, что некоторые средства управления.NET будут автоматически HTML кодировать вывод. Например, установка.Text свойства на управлении TextBox автоматически закодирует его. Это конкретно означает преобразовывать <
в <
, >
в >
и &
в &
. Так опасайтесь делать это...
myTextBox.Text = Server.HtmlEncode(myStringFromDatabase); // Pseudo code
Однако.Text свойство для HyperLink, Литерала и Маркировки не будет HTML кодировать вещи, таким образом обертывая Сервер. HtmlEncode (); вокруг чего-либо устанавливаемого на этих свойствах необходимость, если Вы хотите предотвратить <script> window.location = "http://www.google.com"; </script>
от того, чтобы быть произведенным в свою страницу и впоследствии выполняемый.
Делают немного экспериментирования для наблюдения то, что кодируется и что не делает.
Вам не нужно ждать выхода PHP 5.3, если вы можете придумать способ сделать это вне статического контекста. В php 5.2.9 в нестатическом методе родительского класса вы можете сделать:
get_class($this);
, и он вернет имя дочернего класса в виде строки.
т.е.
class Parent() {
function __construct() {
echo 'Parent class: ' . get_class() . "\n" . 'Child class: ' . get_class($this);
}
}
class Child() {
function __construct() {
parent::construct();
}
}
$x = new Child();
это выведет:
Parent class: Parent
Child class: Child
милая, да?
Если вы не хотите использовать get_called_class (), вы можете использовать другие приемы позднего статического связывания (PHP 5.3+). Но обратная сторона: в этом случае вам нужно иметь метод getClass () в каждой модели. ИМО, это не имеет большого значения.
<?php
class Base
{
public static function find($id)
{
$table = static::$_table;
$class = static::getClass();
// $data = find_row_data_somehow($table, $id);
$data = array('table' => $table, 'id' => $id);
return new $class($data);
}
public function __construct($data)
{
echo get_class($this) . ': ' . print_r($data, true) . PHP_EOL;
}
}
class User extends Base
{
protected static $_table = 'users';
public static function getClass()
{
return __CLASS__;
}
}
class Image extends Base
{
protected static $_table = 'images';
public static function getClass()
{
return __CLASS__;
}
}
$user = User::find(1); // User: Array ([table] => users [id] => 1)
$image = Image::find(5); // Image: Array ([table] => images [id] => 5)