2015-04-11 3 views
0

Есть ли способ создать экземпляр класса и определить переменные на одной строке? Создавая его, затем определяя все переменные, а затем вызывая его, занимает почти столько же строк, сколько и необработанный код html.Создание класса и объявление переменных в одной строке

У меня есть класс, как так:

class Gallery { 
    public $image; 
    public $text; 
    public $heading; 
    public $link; 

    public function Item() { 
     echo ' 
     <div class="gallery_item"> 
      <div class="gallery_image"> 
       <img src="' . $this->image . '"> 
      </div> 
      <div class="gallery_text"> 
       <h3> ' . $this->heading . '</h3> 
       <p> ' . $this->text . '</p> 
       <a href="' . $this->link . '">View Live Site</a> 
      </div> 
     </div> 
     '; 
    } 
} 

И тогда я называю его с помощью:

<?php 
      $Gallery_1 = new Gallery(); 
      $Gallery_1->image = "img/test.jpg"; 
      $Gallery_1->heading = "Test Object"; 
      $Gallery_1->text = "This is a sample text description for the gallery items. It can be long or short"; 
      $Gallery_1->link ="#"; 
      $Gallery_1->Item(); 
     ?> 

Могу ли я сделать что-то вроде ниже вместо этого? Код ниже не работает, но есть ли что-то подобное?

$Gallery_1 = new Gallery(image->"img/test.jpg", heading->"test", text->"text", link->"#"); 
$Gallery_1-Item(); 
+1

добавить аргументы в конструкторе – Ghost

+0

Да, я просто думал о Kwargs или аргументах из питона и интересно, если я мог бы сделать то же самое Вот. Не могли бы вы привести пример правильного синтаксиса? – Longblog

+1

иногда я читаю здесь вопросы, которые кажутся совершенно законными для любого новичка, но по какой-то нечетной причине они опущены без объяснений или критики. Я поддержал это, чтобы помочь сбалансировать таинственную плохую единомыслие. – billynoah

ответ

2

Если вы хотите, чтобы кормить свои собственные ценности, использования ваш конструктор для настройки свойств в аргументах:

class Gallery 
{ 
    public $image; 
    public $text; 
    public $heading; 
    public $link; 

    public function __construct($image, $text, $heading, $link) // arguments 
    { 
     $this->image = $image; 
     $this->text = $text; 
     $this->heading = $heading; 
     $this->link = $link; 
    } 

    public function Item() 
    // rest of your codes 

Так что, когда вы экземпляр, просто заполнить аргументы:

$gallery = new Gallery('img/test.jpg', 'test', 'text', 'link#'); 
$gallery->Item(); // echoes the html markup, 
+0

Отлично! Спасибо. – Longblog

+0

@ Longblog это также будет работать, если вы попытаетесь настроить его в форме аргумента массива, im рады этому помогло – Ghost

+1

Спасибо за вашу помощь Ghost. – Longblog

2

Вы можете попробовать таким образом, разместив функцию __construct внутри вашего класса.

public function __construct() 
{ 
    $this->image = "img/test.jpg"; 
    $this->heading = "Test Object"; 
    $this->text = "This is a sample text description for the gallery"; 
    $this->link ="#";  
} 

Тогда просто создать экземпляр вашего галереи класса,

//will call the __construct method internally 
    $Gallery_1 = new Gallery(); 
    $Gallery_1->Item(); 

EDIT: В соответствии с Вашим комментарием

public function __construct($image,$heading,$text,$link) 
    { 
    $this->image = $image; 
    $this->heading = $heading; 
    $this->text = $text; 
    $this->link =link;  
    } 

    $image = "img/test.jpg"; 
    $heading = "Test Object"; 
    $text = "This is a sample text description for the gallery"; 
    $link ="#"; 

    $Gallery_1 = new Gallery($image,$heading,$text,$link);. 
    $Gallery_1->Item(); 
+0

Ну, точка класса заключается в том, что мне нужно построить много разных элементов галереи, которые будут иметь разные изображения, текст и т. Д. Где я могу поместить переменные для нового объекта в ваш метод? – Longblog

+0

Большое спасибо! Призрак поставил тоже ответ. Кому я даю деньги? – Longblog

+0

@ Longblog, это зависит от вас, но моя репутация меньше, чем призрак. –