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

时间:2013-12-18 04:46:02

标签: 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();

?>

4 个答案:

答案 0 :(得分:15)

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语言参考时阅读更多信息。

这将类定义为Objects的模板或定义。对象与现实世界对象类似,其功能称为“方法”,可以为对象调用。

因此可以将类Play视为具有“getSentence”和“getSong”方法的“Play”对象。然后,这些方法可以操纵对象“播放”的属性或返回有关“播放”的有用信息。这样,Play内的所有代码都独立于程序中的其他代码。

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

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

答案 1 :(得分:0)

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

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

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

更简单的方法是..

$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

这真的是一个小而愚蠢的例子,但如果你让自己稍微考虑一下可能性(这不是唯一的,多态性是类的另一个重要特征)

答案 2 :(得分:0)

通常当你使用一个函数时,你打算从中获取一次信息,然后函数将忘记它发送给你的数据(除非你创建一个站点变量,或者在它中保持不变......)

如果要继续使用信息,可能需要创建一个类。例如,客户登录,并希望查看有关其帐户的六个不同页面。您可能想要创建一个类,以便在客户登录时立即获得有关该客户的信息,您不必继续进行SQL调用。

也许您可以在屏幕顶部显示其状态和结算信息。您将在登录时获取此信息,并将其放入构造函数中。然后,无论他们访问哪个页面,都可以快速获得此信息。

答案 3 :(得分:0)

任何函数都可以作为带有关键字new的构造函数调用,该函数的prototype属性用于从该对象继承方法。

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

然而,这些程序是相互依赖的。提高枪支意味着什么都不是。

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

在对象中,你可以创建一个例如枪。这把枪具有与之相关的不同功能,如举枪,瞄准。

实际上该对象可以自己存在,并且可以重复用于以后的目的。

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中),同时在实际使用函数方面提供更多灵活性。算法也倾向于用递归和组合来定义,而不是循环和迭代。

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