【问题标题】:Nested Class in PHP- Not able to define the type of a class as another classPHP中的嵌套类-无法将类的类型定义为另一个类
【发布时间】:2014-07-18 11:09:58
【问题描述】:

我必须将我的类的属性类型定义为另一个类 Attach。我试着写如下-

<?php

class Attach{
    var $attachmentId;

    var $displayName;

    var $hyperlinkText;

    var $content;
}

class Bb{
    var Attach $attachment;
}

但它给了我一个错误-

解析错误:语法错误,/home/中出现意外的“public”(T_PUBLIC)......

实现它的正确方法是什么?

【问题讨论】:

  • 标签上写着 PHP 5.4,但你使用 PHP 4 OOP 编码风格?最好多看说明书……
  • @MatteoTassinari ,我遵循了 PHP5.4 手册。但是我仍然没有为我的真实场景找到一个简单的方法。在我的真实场景中,Bb 类有 30 到 40 个属性。我不希望他们将它们作为构造函数中的参数传递。您可能希望我创建 setter 方法并使用 setter 方法设置这些受保护的属性。我懒得写那些额外的代码行(setter 方法)。你能建议一种懒惰的方式吗?懒惰是指写更少的代码。
  • 您可以将属性作为数组发送,但懒惰对良好的软件开发没有帮助。

标签: php oop php-5.4


【解决方案1】:

问题出在这里:

class Bb{
    var Attach $attachment;
}

删除附件:

class Bb{
    var $attachment;
}

你不应该真的使用 var,尝试开始使用 private、public、protected 等。

【讨论】:

    【解决方案2】:

    试试这个:

    <?php
    
    class Attach{
    
        protected $attachmentId;
    
        protected $displayName;
    
        protected $hyperlinkText;
    
        protected $content;
    
    }
    
    
    class Bb{
    
        protected $attachment;
    
        public function __construct(Attach $attachment){
            $this->attachment = $attachment;
        }
    }
    
    $attachment = new Attach();
    $bb = new Bb($attachment);
    

    请注意,您在示例中使用的是 PHP 4 风格的 OO。

    有关详细信息,请参阅manual on OO Programming in PHP

    【讨论】:

    • 在我的真实场景中,Bb类有30到40个属性。我不希望他们将它们作为构造函数中的参数传递。您可能希望我创建 setter 方法并使用 setter 方法设置这些受保护的属性。我懒得写那些额外的代码行(setter 方法)。你能建议一种懒惰的方式吗?懒惰是指写更少的代码。
    • 将属性作为具有特定键值的数组发送?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2020-04-10
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多