PHP OOPS概念需要一些指令

时间:2010-05-21 06:24:45

标签: php oop

我需要在PHP中清除一些OOPS概念。

  1. 哪个更快$this->method();self:method();
  2. 我知道static关键字的概念,但是您可以发布它的实际使用情况。由于实例无法访问它,但是有什么好处呢?
  3. 什么是工厂?我怎么用呢?
  4. 什么是 singleton ?我该怎么用?
  5. 什么是后期静态绑定
  6. http://www.php.net/manual/en/oop5.intro.php

    我已经通过以下链接,但我不清楚它。

5 个答案:

答案 0 :(得分:3)

1)哪个更快$ this-> method();或者自我:方法();

我设置了一个简单的循环,使用两种方法调用相同的方法1,000,000次,结果几乎相等(实际上&gt; 稍微更快但是边距极短)< / p>

2)我知道静态关键字的概念,但是请您发帖实际使用它。由于实例无法访问它,但是有什么好处呢?

你的意思是什么不被实例访问?

public static $x;
public static function mymethod() {};

可以通过self :: $ x和self :: mymethod()来访问。

静态成员有多种用途,它们都不是很好。它们可用于创建单例对象,可用于调用类方法而无需实例化类(对于像引导对象这样的东西)

3)什么是工厂?我该如何使用它?

工厂是用于抽象实例化相似类型对象所需的代码的对象。例如,如果您的网站使用用户层次结构,则每个用户级别可能都有自己的类。从根本上说,所有用户类都将以相同的方式创建,但可能需要一个或两个特定于类的操作。

工厂对象将包含所有这些实例化代码,并为开发人员提供简单的接口。因此,您可以使用$ oFactory-&gt; createUser()和$ oFactory-&gt; createManager(),而不是在代码的多个区域重复使用。

4)什么是单身人士?我该如何使用?

单例是一个类,任何时候都只能有一个实例。基本思想是使用静态方法和静态变量来检查对象是否已经实例化。

您将使用单例,其中只有一个类的实例很重要,例如安全模型可能是单例,因为您要确保代码中只有一个地方负责验证用户,如果您只需要一个数据库连接,那么数据库抽象可能是一个单独的连接(为每个查询连接到同一服务器和相同的数据库是没有意义的)

PHP5.3之前的单例有一些基本缺陷,因为没有后期静态绑定意味着你不能轻易地扩展基础单例类。

5)什么是后期静态绑定?

后期静态绑定是静态方法的类解析延迟,以提高它们在OO(特别是派生类)中的使用。 LSB允许 self :: __ CLASS __ 立即解析为当前类而不是定义它们的类。

例如在早期版本的PHP ....

class parentClass {
    public static function someMethod() {
        echo( __CLASS__ );
    }
}

class childClass extends parentClass {
}

$oObject = new childClass();
$oObject::someMethod();

parentClass 输出到浏览器,使用LSB childClass 将被输出。

这对包括单例在内的很多东西都很有用,因为正确地解析了类,现在可以定义一个单例基类,并让其他对象用预期的结果扩展它。

答案 1 :(得分:1)

  

2)静态关键词:与方法不同   和OOPS中使用的数据成员   范围由访问决定   说明符,静态   方法/属性可用作   课程的一部分。所以它可用   到为...定义的所有实例   类。实现静态关键字   属性的功能或   方法必须是前缀   “静态”关键字。要分配值   你需要使用范围的静态变量   解析运算符(::)以及   班级名称。

示例:

< ?
class ClassName
{
   static private $staticvariable;  //Defining Static Variable

   function __construct($value)
   {
        if($value != "")
        {
            ClassName::$staticvariable = $value; //Accessing Static Variable
        }
        $this->getStaticData();
   }

   public function getStaticData()
   {
        echo ClassName::$staticvariable; //Accessing Static Variable
   }
}

$a = new ClassName("12");
$a = new ClassName("23");
$a = new ClassName("");
?>

输出: 12 23 23

  

说明:

* Here i have declared static variable $staticvariable
* In the constructor i am checking and value and then assigning the value
     

到静态变量       *最后getStaticData()方法将输出静态变量   含量

1)哪个更快$ this-&gt; method();或者自我:method();

  

答案:“自我”(不是$ self)指的是   类的类型,其中$ this   指的是当前的实例   类。 “self”用于静态   成员函数允许你   访问静态成员变量。 $这   用于非静态成员   函数,并且是对它的引用   上面的类的实例   成员函数被调用。

     

因为“this”是一个对象,所以你使用   它像:$ this-&gt;成员因为“自我”   它不是一个对象,它基本上是一个   自动引用的类型   当前的类,你使用它像:   自::构件

什么是单身人士?我该怎么用? PHP

在软件工程中,单例模式是一种设计模式,用于通过将类的实例化限制为一个对象来实现单例的数学概念。当需要一个对象来协调整个系统的操作时,这非常有用。该概念有时被推广到当仅存在一个对象时更有效地操作的系统,或者将实例化限制为特定数量的对象(例如,五个)的概念。有些人认为它是一种反模式,判断它被过度使用,在实际上不需要类的唯一实例的情况下引入了不必要的限制,并将全局状态引入应用程序

示例:

final class Singleton 
{

    protected static $_instance;

    private function __construct() # we don't permit an explicit call of the constructor! (like $v = new Singleton())
    { }

    private function __clone() # we don't permit cloning the singleton (like $x = clone $v)
    { }

    public static function getInstance() 
    {
      if( self::$_instance === NULL ) {
        self::$_instance = new self();
      }
      return self::$_instance;
    }
}

$instance = Singleton::getInstance();

5)什么是后期静态绑定?

  

参考:Late Static Binding

什么是工厂?

  

参考Design Pattern

答案 2 :(得分:0)

  

我已经通过以下链接,但我   我不清楚它。

官方文档丰富而全面,但有些用户发现很难理解。如果您无法理解,我建议您在phpro.org(php主题的一个很好的资源)上阅读这个优秀的教程:

<强> Object Oriented Programming with PHP

本教程是用简单的语言编写的,带有很好的真实世界的例子,对那些在理解OOP概念方面有问题的人非常有帮助。

答案 3 :(得分:0)

你问的是一个相当普遍的问题。这些都是非常基本的概念,所以你应该尝试进一步研究,使用一般的OOP教程和参考。

只是提供一些提示:你的大多数问题都提到了“静态”的概念。您需要了解类和类的实例之间的区别。这是关键概念。

Class是创建实例的蓝图。您只有一个类,但它有多个实例。要创建实例,请使用“new”关键字,并为实例指定名称($ x = new A());但是,您可以拥有不需要运行或访问类实例的方法和字段。 Class拥有它们,它们位于任何实例之上,它们不能访问任何不是静态的属性或方法。它们很有用,因为它们可以保存全局的数据和函数(如果你有一个静态变量,它在整个执行过程中都是相同的,无论它在哪里被调用)。

答案 4 :(得分:0)

我强烈建议你阅读一本关于这个主题的书。我个人推荐David Powers的PHP Object-Oriented Solutions。在我看来,这是针对新手的PHP面向对象编码的最佳介绍。在有效部署编程模式之前,您需要核心知识。

如果您真的想了解设计模式,我建议Design Patterns by Christoffer G. Lasater。我自己很难理解其中的一些模式,并且他以一种合理可理解的方式为普通程序员解释了这些模式。它是为Java编写的,但差异并不是那么大。