PHP 对象组合 - 访问所有者类的属性而不传递参数?

矮人维达

我之前已经问过这个问题,但我可能措辞不当。我没有得到答案。

我有一个Image类,Id它在构造时总是创建一个类的实例每个 Image 总是有一个Id,当Image被销毁时,Id也被销毁。据我了解,这称为对象组合。

我的 Image 类(这里:$myImage),在初始化/构造过程中,创建一个属性: $this->id = new Id(); 我希望 $this->id 能够访问 $myImage 的属性。简单的例子:

class Image {
 public $fileSize;
 public $id;
 const validMimeTypes = array('image/png', 'image/jpeg');
 public function __construct($fileSize = 0.0) {
  $this->fileSize = $fileSize;
  $this->id = new Id();
 }
}

class Id {
 public function echoMe() {
  echo $creatorInstance->fileSize;
  echo creatorClass::validMimeTypes;
  //This is what I'd like to know how to do 
 }
}

$myImage = new Image();
$myImage->id->echoMe();

我想知道如何Id访问其创建者的属性之一。如果结果不明显,我想知道访问类常量和对象属性之间是否存在差异

例如,Id可能需要创建者对象的fileNameandfileSize来生成散列,或者可能需要它的validMimeTypes,它可以是描述该类的 const 数组。

我不介意知道这是否有更好的选择 - 事实上,我很好奇 - 但首先我想知道如何在 __construct() 阶段不传递参数的情况下实现这一点。

费利佩·杜阿尔特

首先,您不应该使用公共属性,因为它破坏了封装。看看下面的代码。您可以传递$this给目标类,并能够访问其方法和属性:

class A
{
    public function __construct()
    {
        $this->b = new B($this);
    }

    public function func()
    {
        echo "hello, world!";
    }
}

class B
{ 
    private $a;
    public function __construct(A $a)
    {
        $this->a = $a;

        echo $a->func();
    }
}

$a = new A;

它会显示 hello, world!

因此,在您的情况下,只需使用$this->id = new Id($this);并创建一个构造函数来Id将 Image 实例设置为类属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

设计访问对象所有者的元素

来自分类Dev

访问具有组合的对象方法?

来自分类Dev

如何访问对象数组中的属性而不在php中遍历所有对象?

来自分类Dev

如何访问对象数组中的属性而不在php中遍历所有对象?

来自分类Dev

PHP类的属性具有可被这些对象访问的对象

来自分类Dev

Delphi,找到对象所有者

来自分类Dev

PHP中对象运算符之后的组合变量

来自分类Dev

带有OneToOneField的Django对象组合

来自分类Dev

PHP列出数组元素的所有组合

来自分类Dev

PHP 课程等级的所有可能组合

来自分类Dev

使用对象属性值组合包含对象的多个数组

来自分类Dev

组合对象及其属性的数组。合并后删除对象

来自分类Dev

Python速成课程19-5对象没有属性“所有者”

来自分类Dev

来自委托函数的C#访问所有者对象

来自分类Dev

如何指定我的类是它创建的对象的所有者?

来自分类Dev

如何指定我的类是它创建的对象的所有者?

来自分类Dev

有没有办法按照某些标准将最多 3 个多维数组与 OOP PHP 对象组合成一个数组?

来自分类Dev

遍历许多可迭代对象的所有组合

来自分类Dev

将所有Person对象添加到组合框

来自分类Dev

遍历许多可迭代对象的所有组合

来自分类Dev

如何从javascript访问php对象数组中的php对象属性

来自分类Dev

PostgreSQL:更改所有者对象时出现错误“必须是关系的所有者”

来自分类Dev

从子对象访问父方法在php中具有属性?

来自分类Dev

类-函数对象-PHP

来自分类Dev

PHP、类和对象

来自分类Dev

PHP对象属性

来自分类Dev

PHP对象属性

来自分类Dev

覆盖存储桶所有者不拥有的S3对象文件的权限

来自分类Dev

PHP:重新组合XML属性

Related 相关文章

热门标签

归档