如果允许创建另一个类中的类的实例,我想知道。
或者说,我要在外面创建它,然后把它传递通过构造? 但后来我会不知道我是否需要它创造了它。
实施例(一个数据库类):
class some{
if(.....){
include SITE_ROOT . 'applicatie/' . 'db.class.php';
$db=new db
如果允许创建另一个类中的类的实例,我想知道。
或者说,我要在外面创建它,然后把它传递通过构造? 但后来我会不知道我是否需要它创造了它。
实施例(一个数据库类):
class some{
if(.....){
include SITE_ROOT . 'applicatie/' . 'db.class.php';
$db=new db
你不能在另一个类中定义一个类。 你应该包括与类之外的其他类文件。 在你的情况,将会给你两个顶级类db
和some
。 如今在构造函数中some
你可以决定创建的实例db
。 例如:
include SITE_ROOT . 'applicatie/' . 'db.class.php';
class some {
public function __construct() {
if (...) {
$this->db = new db;
}
}
}
人们说,这是可能的“一类中创建一个类”似乎意味着它可以在类中创建一个对象/实例。 我还没有看到其他的类定义内的实际类的定义,它看起来像的一个例子:
class myClass{
class myNestedClass{
}
}
/* THIS IS NOT ALLOWED AND SO IT WON'T WORK */
由于问题是“是否有可能创建一个类在另一个类中 ”,我现在只能认为它是不可能的。
我只是想指出,这是可能的动态加载内其他的类定义一个类定义。
卢卡斯是正确的,我们不能定义另一个类中的一类,但我们可以包括()或require()他们动态的,因为在包含文件中定义的每个函数和类将具有全局范围。 如果您需要加载类或函数动态,简单地包括的类的功能之一的文件。 你可以这样做:
function some()
{
require('db.php');
$db = new Db();
...
}
http://php.net/manual/en/function.include.php
这是不可能在PHP另一个类创建一个类。 创建另一个对象的对象(类的实例)是不同的东西。
不,这是不可能的。 嵌套类和聚合对象是指出错误的机制。 嵌套类意味着嵌套类的名称 ,其实。 嵌套在B类类A将被命名为 “B \ A”(?)。 从V5.3你可以在命名空间嵌套类名(以及一些其他的名字)。
这可能是在PHP 7 匿名类 。
请参阅从实例的文档 :
class Outer
{
private $prop = 1;
protected $prop2 = 2;
protected function func1()
{
return 3;
}
public function func2()
{
return new class($this->prop) extends Outer {
private $prop3;
public function __construct($prop)
{
$this->prop3 = $prop;
}
public function func3()
{
return $this->prop2 + $this->prop3 + $this->func1();
}
};
}
}
echo (new Outer)->func2()->func3();
// Output: 6
是这样的,而不是从一个类中示出匿名类的使用的简单的例子:
// Pre PHP 7 code
class Logger
{
public function log($msg)
{
echo $msg;
}
}
$util->setLogger(new Logger());
// PHP 7+ code
$util->setLogger(new class {
public function log($msg)
{
echo $msg;
}
});
(编辑)好这个问题,你正在试图完成的例子是混乱。 它从你的例子似乎您试图定义另一个类中的一类。
这样做的正确的名称是嵌套类,它是不可能在PHP。 所以,你的例子中,答案是“NO”。 不要在PHP反正。 其他语言将允许“嵌套类”。 Java的就是一个例子。
例如这不会在PHP工作
class outer_class{
class inner_class{
...
}
...
}
现在问的问题是在另一个类来创建一个类的实例。
这个答案是“YES”,你可以实例化一个“类”内的“对象”。 我们做这一切的时候。
class simple_class{
protected $instanceOfOtherClass;
public function instanciateObject_KeepingAReferenceToIt(){
// create an instance of OtherClass and associate it to $this->instanceOfOtherClass
$this->instanceOfOtherClass = new OtherClass();
}
public function instanciateObject_Without_KeepingAReferenceToIt(){
// create an instance of OtherClass and return it
return new OtherClass();
}
}
一类甚至可以实例化本身。 这就是著名的单身的确和许多其他创建模式 。 可悲的是有些人认为,寂寂依赖注入意味着他们将永远不会再次呼吁新的方法。 错误。
它有助于理解类和对象之间的区别。 一类是可扩展的程序代码模板来创建对象。 一个对象是指一类的特定实例。
我刚才看到这一点,我想补充我的意见。 这可能有利于任何人。 有没有人听说PHP的特质? 虽然特质不会导入另一个类,但只进口了特质到另一个类。 因此,而不是试图导入几个类,你可以有一个主要CLASSE,而子类将被用作特质使你有可能在主/父类中使用它们