我只想告诉你,我是新手,面向对象编程对我来说很难,但这里是我的代码:
class functions
{
function safe_query($string)
{
$string = mysql_escape_string(htmlspecialchars($string));
return $string;
}
}
class info
{
public $text;
function infos($value)
{
echo functions::safe_query($value);
}
}
有什么办法能使这句话变得更漂亮吗?我可以使用
echo functions::safe_query($value);
,而不是我写的extends
,但这是最好的方法吗?谢谢您.编辑:也许我甚至可以不使用类函数,只需要单独的函数文件并包含这些函数?
最佳答案
使用函数类是非常好的,但它可能不是设计应用程序的最佳方法。
例如,您可能有一个具有如下静态方法的泛型“string”或“data”类(显然缺少实现):
class strfunc{
public static function truncate($string, $chars);
public static function find_prefix($array);
public static function strip_prefix($string);
public static function to_slug($string); #strtolower + preg_replace
etc.
}
这样一个类的目的是为您提供一组通用的算法解决方案,您可以在应用程序的不同部分重用这些解决方案。将这些方法声明为static会消除它们的functional nature,这意味着它们没有附加到任何特定的数据集。
另一方面,某些行为(如为查询转义数据)更特定于特定的数据集。在这种情况下,写这样的东西可能更合适:
class db_wrapper{
public function __construct($params); #connect to db
public function escape($string);
public function query($sql);
public function get_results();
}
在这种情况下,您可以看到所有的方法都与数据库对象相关。以后可能会将此对象用作需要访问数据库的另一个对象的一部分。
oop的本质是将数据及其相关行为(方法)保存在一个称为对象的地方。将行为和数据放在同一位置,可以确保附加到数据的行为是唯一允许更改数据的行为(这称为encapsulation),从而更容易控制数据。
此外,将数据和行为放在一个地方意味着您可以轻松地将该对象(数据和行为)传递到应用程序的不同部分,从而增加代码重用。其形式为composition和inheritance。
如果你对一本书感兴趣,The Object-Oriented Thought Process会使你读得像样。或者你可以从SO的Building Skills in Object-Oriented Design中查看免费S.Lott。(提示:PHP语法比Python更类似于Java)。