如何将变量传递给类扩展?

时间:2012-04-02 19:19:18

标签: php oop class constructor scope

将一个变量添加到类扩展中的概念是我无法理解的,可以使用一些帮助。

这是我正在扩展的类的示例。它工作得很好,但我无法访问$ XML变量。我可以将$ XML变为全局,但我知道要避免这样做。

<?php

//Sample XML Object
  $XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
        <data><foo>Bingo!</foo></data>";
  $XML = simplexml_load_string($XML);
// Extend the class
  class myExt extends ENTERPRISE {
      public function HTMLBlock() {
          // Set font
          $this->SetFont('helvetica', 'B', 10);
          $html = '
            <P style="font-weight:normal;">
             This is a test text cell<br />
             Foo is set to '.$XML->foo.'
            </P>
          ';
          // Title
          $this->htmlToBlock(90, '200', $HTML );
       }
  }

  $pdf = new myExt('L', 'Letter', 'Landscape', true, 'UTF-8', false);
?>  

我读过有关构造的内容。我知道我需要添加到父构造中,我仍然不会在哪里/如何向变量发送它。我从这样的事情开始。 (不工作)

<?php

//Sample XML Object
  $XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
        <data><foo>1</foo></data>";
  $XML = simplexml_load_string($XML);

// Extend the class
  class myExt extends ENTERPRISE {
      function __construct($xmlData) {
        parent::__construct();
      }
      public function HTMLBlock() {
          // Set font
          $this->SetFont('helvetica', 'B', 10);
          $html = '
            <P style="font-weight:normal;">
             This is a test text cell<br />
             Foo is set to '.$XML->foo.'
            </P>
          ';
          // Title
          $this->htmlToBlock(90, '200', $HTML );
       }
  }

  $pdf = new myExt('L', 'Letter', 'Landscape', true, 'UTF-8', false);
?>  

我是否以某种方式向myExt()发送了另一个参数?最后神奇的?我试了但是没用。也许是这样的:

$pdf = new myExt('L', 'Letter', 'Landscape', true, 'UTF-8', false,$XML);

感谢任何指导!

1 个答案:

答案 0 :(得分:2)

这是一个非常简单的示例,但是如果构造函数接受6个参数并且您想要传递一个额外的参数,则可以覆盖默认构造函数。如果您发布了ENTERPRISE类,我将更新此响应!

<?php

//Sample XML Object
  $XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
        <data><foo>Bingo!</foo></data>";
  $XML = simplexml_load_string($XML);
// Extend the class
  class myExt extends ENTERPRISE {
      var $XML;
      function __construct($arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $XML)
      {
        parent::__construct($arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
        $this->XML = $XML;
      }
      public function HTMLBlock() {
          // Set font
          $this->SetFont('helvetica', 'B', 10);
          $html = '
            <P style="font-weight:normal;">
             This is a test text cell<br />
             Foo is set to '.$this->XML->foo.'
            </P>
          ';
          // Title
          $this->htmlToBlock(90, '200', $HTML );
       }
  }

  $pdf = new myExt('L', 'Letter', 'Landscape', true, 'UTF-8', false, $XML);
?> 

另请注意,PHP中的变量区分大小写。所以在你的HTMLBlock方法中,$ html!= $ HTML。