Как вы передаете переменную в расширение класса? - PullRequest
1 голос
/ 02 апреля 2012

Концепция добавления переменной в расширение класса - это то, что я не понимаю и могу использовать некоторую помощь.

Это пример класса, который я расширяю.Это прекрасно работает, но я не могу получить доступ к переменной $ 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 Ответ

2 голосов
/ 02 апреля 2012

Это действительно простой пример, но если конструктор принимает 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.

...