在PHP中使用普通函数和类方法有什么区别?

时间:2010-08-22 02:00:41

标签: php oop

我正在努力学习如何在PHP中最好地使用OOP。请注意,即使我研究了这个新“世界”的理论,我也没有明确地进入OOP思考。

使用普通的,分离的函数并将它们作为方法放在类中有什么区别?

假设我有一个名为“商店”的课程。

它有以下方法:retrieveitems,deleteitems,updateitems,additems

除了我可以使用简单的“$ this”调用方法内部的方法之外,将它们放在不同类的不同函数之间有什么区别?我的意思是,例如,我仍然可以在函数retrieveitems中调用函数deleteitems吗?即使不上课?

请帮助我理解我所缺少的内容。

7 个答案:

答案 0 :(得分:11)

OOP除其他外还提供封装。

class Shop {

    function __construct($items) {
        $this->inventory = $items;
    }

    function deleteItem($item) {
        $key = array_search($item, $this->inventory);
        if ($key !== false)
            unset($this->inventory[$key]);
    }

}

现在您可以创建实例:

$computerShop  = new Shop(array('ram', 'monitor', 'cpu', 'water'));
$hardwareStore = new Shop(array('hammer', 'screwdriver', 'water'));

他们每个人都是彼此独立的。如果我$computerShop->removeItem('water')$hardwareStore water仍应inventory。 (see it in action)这样做的程序方法更加混乱。


关于OOP的另一个好处是你可以使用继承和多态:

class Animal {

    function eat() {
        $this->hungry = false;
    }

    abstract function speak();
}

class Cat extends Animal {

    function speak() {
        echo 'meow!';
    }
}

class Dog extends Animal {

    function speak() {
        echo 'woof!';
    }    
}

现在,CatDog都可以调用方法eat(),即使它们没有在类中显式声明 - 它们也是从父类Animal继承的。他们还有speak()方法可以做不同的事情。很整洁,呵呵?

百科:

Object-oriented programmingEncapsulationInheritancePolymorphism

答案 1 :(得分:4)

我喜欢的关于类的最有趣的功能之一是封装。您可以将各种函数链封装到一个主函数中并直接调用它们。封装创建了一个环境,您可以在其中保护成员对象和属性不被类修改。

类的另一个主要部分是。能够将与特定对象相关的所有功能和属性组合在一起,以及将该类的不同实例作为对象的能力,简直是神奇的。假设你有一堆相互引用的函数,并传递几乎相同的参数。这是一个好的迹象,表明这些函数属于一个类,而这些参数应该是该类的成员。

由于您使用的是PHP,想象一下您创建了一个创建面板的类。现在,您可以使用此类创建不同但相似的布局,例如新闻面板,广告面板,产品展示面板,通过创建它的不同对象,以及提供内容。

您可能会说使用函数也可以这样做,但函数无法提供类提供的可伸缩性和灵活性。

<强>继承

这是OOP的主要功能之一,您可以创建无限级别的父类和子类。例如,您已创建了一个类car。这个类有像轮子,齿轮,转向这样的属性有像drive(),stop()这样的方法,但你不能陪伴这个世界上的每辆车,所以现在你将创​​建它的子类。在这种情况下,子类可以是2WD和4WD,并且这些子类也可以具有具有新成员和方法的其他子类。但是你可以访问其成员和功能,一直到其父母和祖父母。

<强>多态性

这表示能够覆盖父类中的函数。即简单汽车的驱动系统与4WD汽车的驱动系统不同,因此您需要覆盖以前的父功能并用新功能替换它。

另一种是重载,它能够在不同的参数情况下使用函数。例如,对于一辆简单的汽车来说,它需要发动机启动,齿轮和加速,但对于像法拉利这样的现代汽车,你只需要启动发动机并按下油门,你就不需要齿轮,所以对于这两种情况依次要使用方法drive(),您提供不同的参数。并且类使它成为可能。(但这个功能在PHP中不可用:()

答案 2 :(得分:3)

请注意,OOP是关于对象的90%,关于类和接口的10%。这就是我们称之为 object 面向编程的原因。

我认为你的问题太笼统了。有很多关于OOP的文章在互联网上(你不仅限于PHP文章--OOP是一个范例,所以你可以阅读有关Java等的文章。)

  

面向对象编程(OOP)是一种编程范例,它使用“对象” - 由数据字段和方法及其交互组成的数据结构 - 来设计应用程序和计算机程序。编程技术可能包括数据抽象,封装,模块化,多态和继承等功能。

阅读更多关于该引文的重要内容。

答案 3 :(得分:1)

我喜欢OOP有一个原因。对象。想想篮球比赛。 每个玩家都是一个对象。他们都有人类,每个人都有不同的个人技能和属性。如果我打算编写一个篮球比赛,它将变成没有OOP的意大利面条代码。使用OOP,我可以产生个体并命名它们:

丹很高,比尔很快。

$dan = new Human(Tall->increaseHeight());
$bill = new Human(Fast->increaseSpeed());

没有OOP让一群人相互竞争并追踪他们的属性将是一团糟。我不太了解OOP,但组织是喜欢它的一个原因。

答案 4 :(得分:0)

如果没有一个类,你仍然需要一个结构来保存你要添加,更新和删除的项目集(由于你已经拥有项目,检索会消失)。 / p>

答案 5 :(得分:0)

您的问题涉及更广泛的PHP,您在询问有关OOP基础知识的问题。我建议您仍然对main features of OOP programming进行基本阅读。

答案 6 :(得分:0)

主要区别在于范围。以下是关于差异的精彩视频(即使是计算机语音):http://www.youtube.com/watch?v=D8jZ0l_GwXQ&feature=related