我需要在PHP中清除一些OOPS概念。
$this->method();
或self:method();
static
关键字的概念,但是您可以发布它的实际使用情况。由于实例无法访问它,但是有什么好处呢? http://www.php.net/manual/en/oop5.intro.php
我已经通过以下链接,但我不清楚它。
答案 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)什么是后期静态绑定?
什么是工厂?
答案 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编写的,但差异并不是那么大。