课外的功能

时间:2010-07-31 11:32:12

标签: php oop class

我只想告诉你我是OOP的新手,这对我来说很难,但这是我的代码:

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,而不是写echo $this->safe_query($value);,但这是最好的方法吗?谢谢。

编辑,也许我甚至可以不使用类函数,只是创建单独的函数文件并包含它?

5 个答案:

答案 0 :(得分:5)

是的,只需在类定义之外定义您的函数。

function safe_query($string){
    return mysql_escape_string(htmlspecialchars($string));
}

然后像这样称呼它

safe_query($string);

答案 1 :(得分:2)

类外的函数会丢弃全局命名空间,并且它是一个开放的邀请,可以回退到过程式编程。因为你正在转向OOP思维模式,所以函数:: safe_query($ value);绝对比在类外声明的函数更漂亮(更干净)。也不要使用define()。但是,拥有一个混合了不相关方法的函数类也不是最好的方法。

答案 2 :(得分:2)

使用函数类非常好,但它可能不是设计应用程序的最佳方法。

例如,你可能有一个通用的“字符串”或“数据”类,这样的静态方法(显然缺少实现):

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.
}

这类课程的目的是为您提供一系列通用的算法解决方案,您可以在应用程序的不同部分重复使用这些解决方案。将这些方法声明为静态会消除它们的functional nature,并且意味着它们不会附加到任何特定的数据集。

另一方面,某些行为(如转义查询数据)更具体地针对特定数据集。在这种情况下写这样的东西可能更合适:

class db_wrapper{
    public function __construct($params); #connect to db
    public function escape($string);
    public function query($sql);
    public function get_results();
}

在这种情况下,您可以看到所有方法都与数据库对象相关。您稍后可能将此对象用作需要访问数据库的另一个对象的 part

OOP的本质是将数据及其相关的行为(方法)保存在一个地方,称为对象。将行为和数据放在同一个位置可以更容易地控制数据,方法是确保附加到数据的行为是允许更改它的唯一行为(这称为encapsulation)。

此外,将数据和行为放在一个位置意味着您可以轻松地将该对象(数据和行为)传递到应用程序的不同部分,从而增加代码重用。其格式为compositioninheritance

如果你对一本书很感兴趣,那么The Object-Oriented Thought Process就会有一个好看的读物。或者你可以从SO Building Skills in Object-Oriented Design查看免费的S.Lott。 (提示:PHP语法与Java更类似于Python。)

答案 3 :(得分:1)

  

有没有办法做出这句话   :echo functions::safe_query($value);   漂亮?

不是真的。具有functions类的IMO没有用处,只是使它成为一个全局函数(如果它不是更合乎逻辑的类的一部分,例如Database),那么你可以改为safe_query($value);。 / p>

  

也许我甚至不能上课   功能,只需单独的文件   功能包括那个?

为逻辑代码块创建文件,而不是为什么类型的代码创建文件。不要为“函数”创建文件,为“数据库相关代码”创建文件。

答案 4 :(得分:0)

从OOP开始可能是一个真正的挑战。我所做的一件事就是看看Zend Framework中的事情是如何完成的。不仅要阅读手册(http://www.framework.zend.com/manual/en/zend.filter.input.html,还要查看源代码。这需要付出一些努力,但需要付出代价。

查看您的问题的背景和您发布的代码示例,我建议您查看some basic patterns,包括a simple form of MVCprinciples they are based upon