Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 课外活动_Php_Oop_Class - Fatal编程技术网

Php 课外活动

Php 课外活动,php,oop,class,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)

我只想告诉你,我是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\u query($value)更漂亮?我可以使用
extends
,而不是编写
echo$this->safe\u查询($value),但这是最好的方法吗?谢谢。


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

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

function safe_query($string){
    return mysql_escape_string(htmlspecialchars($string));
}
那就这样说吧

safe_query($string);
有什么办法可以说这个句子吗 :
echo函数::安全查询($value)
更漂亮

不是真的。IMO有一个
函数
类没有任何用途,只需将其作为一个全局函数(如果它不是更逻辑的类的一部分,例如
数据库
),这样您就可以进行
安全查询($value)取而代之

也许我甚至可以不上课 函数,只需创建单独的文件 包括哪些功能


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

类之外的函数会散落在全局命名空间中,这是一个公开的邀请,让我们回到过程编程。由于您正转向面向对象的思维方式,functions::safe_query($value);绝对比在类外声明的函数更漂亮(更干净)。也不要使用define()。但是,混合使用不相关方法的functions类也不是最好的方法。

从OOP开始可能是一个真正的挑战。我做的其中一件事就是查看Zend框架中的工作是如何完成的。不仅要阅读手册,还要看源代码。这需要一些努力,但也值得


查看问题的上下文和您发布的代码示例,我建议您查看。

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

例如,您可能有一个通用的“string”或“data”类,其中包含如下静态方法(显然缺少实现):

这样一个类的目的是为您提供一组通用的算法解决方案,您可以在应用程序的不同部分重用这些解决方案。将这些方法声明为静态方法可以避免它们的错误,并且意味着它们不会附加到任何特定的数据集

另一方面,某些行为(如为查询转义数据)更特定于一组特定的数据。在这种情况下,编写以下内容可能更合适:

class db_wrapper{
    public function __construct($params); #connect to db
    public function escape($string);
    public function query($sql);
    public function get_results();
}
在本例中,您可以看到所有方法都与数据库对象相关。您以后可能会将此对象用作需要访问数据库的另一个对象的一部分

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

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


如果你对一本书感兴趣,这本书可以让你读一读。或者你也可以从SO那里免费看看。(提示:PHP语法更类似于Java而不是Python。)

该死,我保证我试过了,但没有成功,现在它完美地工作了0。o谢谢+1,但为什么这是一个糟糕的方法?如果我必须在几个类中使用相同的函数,那么我需要在每个类中一次又一次地创建函数?这样更好吗?当你可以调用functions::safe\u query($value)时,为什么你需要重复创建函数;想用多少次就用多少次?不,你说过:
但是有一个混合了不相关方法的functions类也不是最好的方法。
,那么为什么这不是最好的方法呢?虽然你可以,但是把一个验证用户的方法和一个生成谷歌地图的方法结合起来是没有意义的。老实说,在使用类之前作为不相关函数的容器,我更喜欢好的旧函数编程。仅仅将函数放在类中不是OOP,也无助于理解概念。@嘿:先了解OOP是什么,然后再利用类。目前您正在将类误用为某种名称空间。旁注:
mysql\u escape\u string()
已被弃用,应改用
mysql\u real\u escape\u string
。既然您正在进入OOP领域,也许您还应该研究mysqli类:(相关)如果您想静态调用该方法,可以使用
public static function safe\u query()
static function safe\u query()
class db_wrapper{
    public function __construct($params); #connect to db
    public function escape($string);
    public function query($sql);
    public function get_results();
}