在PHP中何时使用类与函数

在PHP中何时使用类与函数,php,function,class,Php,Function,Class,灯泡还没亮呢 我非常喜欢一个简单易懂的解释,说明在php中使用类比只使用函数更具优势 下面是一个简单的例子,我想知道一个类是否更有效: 假设我有一个用php构建的迷你日历小部件。我正在考虑调用函数miniCal('arrayVars1','var2')。但我可能会在那一页上做两次。通过在这里使用类来使用更少的资源,创建它的新实例吗 我应该在这里叫什么树,因为我觉得现在这棵树就像一堵砖墙……类用于将数据表示为对象。如果要表示用户数据或拍卖出价之类的内容,则创建用户对象或拍卖出价对象可以更容易地将这

灯泡还没亮呢

我非常喜欢一个简单易懂的解释,说明在php中使用类比只使用函数更具优势

下面是一个简单的例子,我想知道一个类是否更有效:

假设我有一个用php构建的迷你日历小部件。我正在考虑调用函数
miniCal('arrayVars1','var2')
。但我可能会在那一页上做两次。通过在这里使用类来使用更少的资源,创建它的新实例吗


我应该在这里叫什么树,因为我觉得现在这棵树就像一堵砖墙……

类用于将数据表示为对象。如果要表示用户数据或拍卖出价之类的内容,则创建用户对象或拍卖出价对象可以更容易地将这些数据保存在一起,在代码中传递,并使读者更容易理解。这些类将具有属性(数据字段,如数字、字符串或其他对象)以及方法(可以在任何类上操作的函数)

课程通常不会提供任何性能方面的好处,但它们也很少有任何负面影响。他们真正的好处在于使代码更清晰


我建议您阅读和。

自从PHP5以来,一件常见的事情就是创建充当库的类。这为您提供了组织功能和利用类特性(如_autoload())的好处

例如,假设您有两个用于加密和解密数据的函数。您可以将它们封装在一个类中(我们称之为加密),并使它们成为静态函数。然后可以使用如下函数(注意,不需要初始化(即$obj=新加密)):

这样做的好处是:

  • 您的加密功能被分组并组织起来。您和维护代码的任何人都知道在哪里可以找到加密功能
  • 这是非常清楚和容易阅读。良好的可维护性
  • 您可以使用_autoload()自动包含该类。这意味着您可以像使用内置函数一样使用它
  • 因为它包含在自己的类和文件中,所以它是可重用的,并且可以很容易地移植到新项目中

  • 在回答这个问题时,我列出了一个使用OOP风格类的地方:

    基本上,只要你想表示一个有东西在里面的对象。就像一个数据库变量,其中有一个唯一的连接。因此,我会将其存储起来,以便确保
    mysql\u查询
    每次都使用正确的连接:

    class MySQL extends Database
    {
        public function connect($host, $user, $pass, $database)
        {        
            $this->connection = mysql_connect($host, $user, $pass);
            $this->select_db($database);
        }
    
        public function query($query)
        {
            return mysql_query($query, $this->connection);
        }
    
        public function select_db($database)
        {
            mysql_select_db($database);
        }    
    }
    
    或者,您可能想要构建一个表单,您可以创建一个包含输入列表的表单对象,这样当您决定显示表单时,您就可以在表单中:

    class Form
    {
        protected $inputs = array();
        public function makeInput($type, $name)
        {
             echo '<input type="'.$type.'" name="'.$name.'">';
        }
    
        public function addInput($type, $name)
        {
             $this->inputs[] = array("type" => $type,
                    "name" => $name);
        }
    
        public function run()
       {
           foreach($this->inputs as $array)
           { 
              $this->makeInput($array['type'], $array['name'];
           }
        }
    }
    
    $form = new form();
    
    $this->addInput("text", "username");
    $this->addInput("text", "password");
    

    所有这些都是创建类的原因,因为它们表示具有名称或职务等属性的对象,并且可能具有显示表单等方法。

    函数是应用程序的主要部分,类更像是图版。没有盘子吃肉很乱。但是如果你没有肉,你就没有饭吃

    如果您的应用程序中有500个函数,您可能会希望将其中至少一半的函数分组到更大的集合中,以便于访问。您可以设计通用的命名约定(“加密”、“加密”、“解密”等)……但类更简单。如果您的应用程序中只有12个函数,那么可能只有1个或多个类(如果有的话)可以生存下来

    我通常不需要在类中存储数据/属性。我倾向于将它们存储在数据库中。所以我没有经常利用课程的这一方面


    类还允许多态性,这可能会有所帮助。如果你有几个非常相似的类,或者一个类上有几个变体,你可以保存代码…而不必构造一些多用途的、类似弗兰肯斯坦的类。

    使用类是对函数进行分组的好方法

    不同之处在于编程范式的使用。类在O.O.P.中是必需的,但在程序范式中不是必需的。在过程范例中,您可以将函数分组到一个文件中,该文件可以看作是一个模块

    ---编辑---

    您可以使用程序范式。在这个范例中并不真正需要类

    function miniCal($string_1, $string_2){
    //do something   
    }
    
    //invoke function
    miniCal('arrayVars1', 'var2');
    
    您可以使用OOP范例。需要上课

    class Calculation {
    
    public static function miniCal($string_1, $string_2){
        //do something   
        }
    }
    
    //invoke function
    Calculation::miniCal('arrayVars1', 'var2');
    
    结论

    这两种范式都是可行的,但上面的OOP示例使用的是一个包含所有计算方法(函数)的计算对象。计算对象将计算函数分组,从而将它们保留在一个位置


    本例中的O.O.p.范式遵循一种称为“可靠责任”的原则。这背后的想法是保持代码优雅、可维护和可读

    基本上两者都做相同的工作,但通过使用类,您可以更轻松地管理代码。还有一件事,如果我们使用类,那么我们必须创建用于调用其中定义的函数的对象,而如果我们直接创建函数,则不需要创建对象。

    addInput函数与
    函数addInput有什么不同($type,$name){echo'echo';}输入(“文本”、“用户名”);输入(“文本”、“密码”)
    编写代码来生成HTML标记是一个非常糟糕的例子。这只会使您的代码更难阅读。如果您必须使用代码来生成HTML,正如@AndyGee所建议的,他的示例函数要简单得多。但即使如此,该函数也毫无理由地隐藏在其他文件中的某个地方。类和函数不应重复任何内容它们返回的数据由模板或其他东西处理。一旦你有40个或更多的类,你就会失去对w的跟踪和控制
    class Person{
    
        public $name;
        public $job_title;
        // ... etc....
    
    }
    
    function miniCal($string_1, $string_2){
    //do something   
    }
    
    //invoke function
    miniCal('arrayVars1', 'var2');
    
    class Calculation {
    
    public static function miniCal($string_1, $string_2){
        //do something   
        }
    }
    
    //invoke function
    Calculation::miniCal('arrayVars1', 'var2');