php中的类和函数有什么区别


What is the difference between class and function in php?

我自己使用了以下代码,它们都给出了相同的结果。那么为什么我们使用类而不是普通函数,以及类和函数之间有什么区别。

<?php
class MyClass{
    public $property = "This is My Class Property";
    public function getProperty(){
        echo $this->property."<br />";
    }   
}
$obj=new MyClass();
echo $obj->getProperty();
?>

<?php
    function getProp(){
        $prop="This is My Class Property";
        echo $prop;
    }
    getProp();
?>

PHP 语言参考包含有关函数和类的详细信息:http://www.php.net/manual/en/langref.php

它还解释了PHP的大多数其他功能。如果想学习PHP,这是最好的起点。

功能

该函数是一组语句(代码行(。

例如以下语句:

$name = 'mary';
$gender = 'girl';
if ($gender == 'girl') {
  $line = $name . ' had a little pony.';
} else if ($gender == 'boy') {
  $line = $name . ' had a little horse.';
}
echo $line;
可以组合

成一个函数,以便可以重用:

getSentence('mary', 'girl');
getSentence('peter', 'boy');
function getSentence($name, $gender) {
  if ($gender == 'girl') {
    $line = $name . ' had a little pony.';
  } else if ($gender == 'boy') {
    $line = $name . ' had a little horse.';
  }
  echo $line;
}

请注意两个函数调用:

getSentence('mary', 'girl');
getSentence('peter', 'boy');

这两个语句在 getSentence 函数中运行整个代码块,并将变量传递给它$name和$gender。第一个功能$name = 'mary'$gender = 'girl',第二个函数$name = 'peter'$gender = 'boy'

因此,函数

的主要好处是你已经对代码进行了分组以供重用,允许为函数所需的变量传递不同的值。这些变量称为函数参数。

对代码进行分组的另一个好处是更易于阅读。你本质上是在命名代码块,并赋予它们一个特定的目的。使其易于阅读和记住它的使用。

另一个好处是消除了冗余。您不必多次编写代码块。您只需定义一次,然后多次调用它。这也使得函数代码的编辑会影响对该函数的所有调用 - 这减少了在仅更改一个方面时必须编辑多个位置的错误。

例如:

我们可以确保$name字符串具有大写的第一个字符。

function getSentence($name, $gender) {
  $name = ucfirst($name);
  if ($gender == 'girl') {
    $line = $name . ' had a little pony.';
  } else if ($gender == 'boy') {
    $line = $name . ' had a little horse.';
  }
  echo $line;
}

我们只做了一个更改,它影响了对 getSentence(( 的每个函数调用。在这种情况下,两者:

getSentence('mary', 'girl'); 

getSentence('peter', 'boy'); 

类是一组函数。

class Play {
  function getSentence($name, $gender) {
    $name = ucfirst($name);
    if ($gender == 'girl') {
      $line = $name . ' had a little pony.';
    } else if ($gender == 'boy') {
      $line = $name . ' had a little horse.';
    }
    echo $line;
  }
  function getSong($name) {
    // code here
  }
}

我们所做的只是把

class Play { /** functions here **/ }

围绕一组功能。

这提供了与函数对语句相同的好处,但类对函数的作用相同。

类进一步构建一种称为面向对象编程(OOP(的编程方法,您可以在PHP语言参考链接中阅读更多相关信息。

这会将类定义为对象的模板或定义。对象类似于现实世界的对象,函数称为可以为对象调用的"方法"。

因此,可以将类 Play 视为名为"Play"的对象,方法为 "getSentence" 和 "getSong"。然后,这些方法可以操作对象"Play"的属性或返回有关"Play"的有用信息。这样,Play 中的所有代码都独立于程序中其他位置的代码。

当 Play 中的代码需要其他地方的一些代码才能运行时,可以使用"继承"引入它,这是 OOP 的主要部分。我不会详细介绍这一点,因为这是一个非常广泛的话题。

我建议买一本关于OOP的书,并阅读它,以真正理解为什么你应该使用类和方法以及何时使用它们。

任何函数都可以作为构造函数使用关键字 new 调用,并且该函数的原型属性用于从中继承方法的对象。

函数是用于执行特定任务的指令或程序集。 例如,射击枪支有一组要执行的程序。 举起枪,瞄准等。

但是,这些过程是相互依赖的。 也就是说,举枪意味着没有单独意义。

但是,在类中,您可以创建对象。

在 对象 中,您可以创建例如枪。 这把枪有不同的功能,比如举枪、瞄准。

实际上,对象可以独立存在,并且可以在以后的目的中重用。

class SimpleClass
{
    // property declaration
    public $var = 'a default value';
    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}

所以当你想使用类对象时,你需要声明

$objectSimple = new SimpleClass();

当你想使用类方法时,你需要声明

$objectSimple->displayVar();

如您的示例

<?php
class MyClass{
    public $property = "This is My Class Property";
    public function getProperty(){
        echo $this->property."<br />";
    }   
}
$obj=new MyClass();
echo $obj->getProperty();
?>

<?php
    function getProp(){
        $prop="This is My Class Property";
        echo $prop;
    }
    getProp();
?>

是的,你们都会工作。 查看您的样本后,您似乎要求 OOP 与程序。

他们根本没有利弊,IMO。它们只是解决相同问题的不同方法。

在纯粹的过程风格中,数据往往与在其上运行的函数高度分离。

在面向对象的风格中,数据往往带有一系列函数。

在函数

式风格中,数据和函数倾向于彼此之间有更多的共同点(如在Lisp和Scheme中(,同时在函数的实际使用方式方面提供了更大的灵活性。算法也倾向于根据递归和组合而不是循环和迭代来定义。

当然,语言本身只影响哪种风格是首选的。

你可以说一个类只是一组函数,但实际上它远不止于此。

将类视为一组用于操作相同数量数据的函数。

假设您从数据库中提取用户。如果成员系统有任何复杂性,则必须在多个页面上分配许多变量。

一个更简单的方法是..

$user = new user(2)[/php)  (assuming user is the class, and 2 is the userid it pulls from the databse, your contructor function would populate all of the users information, which is easily grouped together and used like...
[code=php:0]print "Hello ". $user->firstName . " welcome to thiswebsite. Your last login was " . $user->lastLogin

这确实是一个小而愚蠢的例子,但如果你让自己思考一下可能性(这不是唯一的一个,多态性是类的另一个伟大功能(

通常,当您使用一个函数时,您打算从中获取一次信息,然后该函数会忘记它发送给您的数据(除非您正在创建一个站点变量或其中的常量......

如果要

继续使用信息,则可能需要创建的类。 例如,客户登录后想要浏览有关其帐户的六个不同页面。 您可能希望创建一个类,以便在客户登录时立即获得有关该客户的信息,而不必不断进行 sql 调用即可获取。

也许在屏幕顶部,您希望输入他们的状态和账单信息。 当他们登录并放入构造函数时,您将获得此信息。 然后,无论他们转到哪个页面,此信息都将很快可用。