2013-09-21 2 views
1

У меня есть follwing класс в файле «super.class.php»Как напечатать несколько переменная, созданная внутри функции класса в PHP

<?php  
class super { 

     public function loadme() { 
      $tilt = "I am tilted"; 
      $straight = "I am Straight"; 
      $round = "I am round"; 
      $sleep = "I am Sleeping"; 
     } 

     public function fireme() { 
      $hit = "I am hit"; 
      $bullet = "I got bullet"; 
      $gun = "Cover me! I am receiving Heavy Firing"; 
     } 
} 
?> 

Я хочу напечатать каждую переменную в моем другом файле. Примечание: Классы вызываются из spl_autoload_register

Когда я пытаюсь напечатать: -

<?php 
    $obj_super = new super(); 
    echo $obj_super->loadme()->tilt; 
    echo $obj_super->fireme()->hit; 
?> 

я получаю сообщение об ошибке: - Trying to get property of non-object in agent.php

Обновление: Я получил это работает через этот

Надеюсь, что я не ошибаюсь ниже: -

<?php  
    class super { 

     public $title = array(); 
     public $situation = array(); 

     public function loadme() { 
      $this->title['tilt'] = "I am tilted"; 
      $this->title['straight'] = "I am Straight"; 
      $this->title['round'] = "I am round"; 
      $this->title['sleep'] = "I am Sleeping"; 
      return $this->title; 
     } 

     public function fireme() { 
      $this->situation['hit'] = "I am hit"; 
      $this->situation['bullet'] = "I got bullet"; 
      $this->situation['gun'] = "Cover me! I am receiving Heavy Firing"; 
      return $this->situation; 
     } 
    } 
    ?> 

    <?php 
     $obj_super = new super(); 
     $value = $obj_super->loadme(); 
     echo $value['tilt']; 
    ?> 

Благодаря

+0

Все эти переменные _local_, они не привязаны к экземпляру. '$ this-> tilt = ...' и т. д. – elclanrs

+0

Я даже пытался использовать 'public $ variable' и' global $ variable' внутри функции, он все еще не работает :( –

+0

Если вы * действительно * хотите сделайте это так, вам нужно создать новый объект в каждом методе (например, 'stdClass') и назначить ему локальные переменные как свойства, а затем вернуть этот объект. Это очень грязно, хотя - что именно вы пытаетесь сделать? –

ответ

1

В соответствии с просьбой - ответ от Johny Bravo.

class super { 

    public $title = array(); 
    public $situation = array(); 

    public function loadme() { 
     $this->title['tilt'] = "I am tilted"; 
     $this->title['straight'] = "I am Straight"; 
     $this->title['round'] = "I am round"; 
     $this->title['sleep'] = "I am Sleeping"; 
     return $this->title; 
    } 

    public function fireme() { 
     $this->situation['hit'] = "I am hit"; 
     $this->situation['bullet'] = "I got bullet"; 
     $this->situation['gun'] = "Cover me! I am receiving Heavy Firing"; 
     return $this->situation; 
    } 
} 


$obj_super = new super(); 
$value = $obj_super->loadme(); 
echo $value['tilt']; 
+0

Спасибо, я просто надеюсь, что этот код не замедлит загрузку моей страницы :(:) –

+0

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

+0

@JohnyBravo: Производительность не проблема, пока она есть. Беспокойство о том, как заставить работать работать, и не слишком беспокоиться о скорости вашей страницы, пока вы не укажете на какую-то конкретную проблему. – cHao

2

Вы должны добавить переменные в классе, например, так:

class super { 
    public $tilt; 
    public $straight; 
} 

, а затем установить их с

public function loadme(){ 
    $this->tilt = "I am tilted"; 
    $this->straight = "I am straight"; 
} 

Вы можете получить их с

$new = new super; 
$new->loadme(); 
echo $new->tilt; 
+0

Мне нужно называть это только с помощью функции :( –

+0

Если вы установите их в функции, например 'public function() {$ this-> tilt = ' any ';} ', тогда вы можете сделать' $ new-> function(); 'и затем' echo $ new-> tilt; ' – TheNytangel

+0

Я получил его, работая через этот http://phpfiddle.org/api/raw/xw7 Надеюсь, я не ошибаюсь. Если это правильно, кто-то может опубликовать это, чтобы я мог принять его как ответ. Я не могу добавить свой ответ из-за моей меньшей репутации. –

2

Хорошо, вы, кажется, неправильно поняли, как работают функции в PHP - переменные, которые вы объявили в ваших функциях, являются локальными для функции - то есть они имеют только значение внутри области функций.

Во-вторых, запись $obj_super->loadme()->tilt даст значение свойства tilt возвращения loadme()loadme() так оленья кожа ничего возвращать - вы, по сути делает это null->tilt. Который, вероятно, вызывает всевозможные ошибки, если вы проверяете свой журнал.

Что вы пытаетесь достичь здесь?

+0

Что вы подразумеваете под ' свойство 'return'? Где вы это читали? Это свойство объекта, внутри которого функция определена как метод, т. е.' $ this-> property'. – BlitZ

+0

Ну, если я возвращаю объект в свой метод, используйте ->, я получаю доступ к свойству возвращаемого объекта. –

+0

Могу ли я вернуть несколько переменных из функции ? –

1

Возможно, вы можете создать класс, как этот

<?php  
    class super { 
     private $_tilt; 
     private $_straight; 
     private $_round; 
     private $_sleep; 

     private $_hit; 
     private $_bullet; 
     private $_gun; 

     public function loadme() { 
      $this->_tilt = "I am tilted"; 
      $this->_straight = "I am Straight"; 
      $this->_round = "I am round"; 
      $this->_sleep = "I am Sleeping"; 
     } 

     public function fireme() { 
      $this->_hit = "I am hit"; 
      $this->_bullet = "I got bullet"; 
      $this->_gun = "Cover me! I am receiving Heavy Firing"; 
     } 

     public function getTilt() { 
      return $this->_tilt; 
     } 

     // Other getter functions 
    } 
?> 

Затем вызовите функции геттер

<?php 
    $oSuper = new super; 
    $oSuper->loadme(); 
    echo $oSuper->getTilt(); 
?> 
+0

Я не хочу использовать getter fucntion для каждой переменной, это сделает мою страницу медленной, я думаю. ? –

+0

Не уверен в этом. –

+0

www.google.com/search?q=website+optimisation+php+google+developer –

1

если вы хотите назвать это точно так, как вы вызываете его, вы можете вернуть сам объект от каждой функции. Попробуйте следующее:

class super { 
    public $tilt = ''; 
    public $straight = ''; 
    public $round = ''; 
    public $sleep = ''; 
    public $hit = ''; 
    public $bullet = ''; 
    public $gun = ''; 
    public function loadme() { 
     $this -> tilt = "I am tilted"; 
     $this -> straight = "I am Straight"; 
     $this -> round = "I am round"; 
     $this -> sleep = "I am Sleeping"; 
     return $this; 
    } 

    public function fireme() { 
     $this -> hit = "I am hit"; 
     $this -> bullet = "I got bullet"; 
     $this -> gun = "Cover me! I am receiving Heavy Firing"; 
     return $this; 
    } 

} 

$obj_super = new super(); 
echo $obj_super -> loadme() -> tilt; 
echo $obj_super -> fireme() -> hit; 

еще раз как @TheNytangel предложил следующее будет работать с этим классом. если вы хотите подавить это поведение, возможно, вам придется перепроектировать ваши функции как объекты.

$obj_super = new super(); 
$obj_super -> loadme(); 
echo $obj_super -> tilt; 
$obj_super -> fireme(); 
echo $obj_super -> hit; 
+0

Это не работает, ... я treid it :( –

+0

Вы получаете сообщения об ошибках? Я тестировал его перед публикацией и работал для меня – bansi

+0

NO Ошибка с нет значения. Blank my php version 5.4.9 –

0

В соответствии с кодом ОП в скрипке с модификацией.Я удалил переменные экземпляра. Новая скрипка здесь http://phpfiddle.org/main/code/5qe-hn6

<?php  
class super { 

    public function loadme() { 
     $title=array(); 
     $title['tilt'] = "I am tilted"; 
     $title['straight'] = "I am Straight"; 
     $title['round'] = "I am round"; 
     $title['sleep'] = "I am Sleeping"; 
     return $title; 
    } 

    public function fireme() { 
     $situation=array(); 
     $situation['hit'] = "I am hit"; 
     $situation['bullet'] = "I got bullet"; 
     $situation['gun'] = "Cover me! I am receiving Heavy Firing"; 
     return $situation; 
    } 
} 
?> 

<?php 
    $obj_super = new super(); 
    $value = $obj_super->loadme(); 
    echo $value['tilt']; 
?> 
+0

Вау .. :) Большое вам спасибо. offtopic: вы действительно кодируете последние 24 года, где в Индии вы находитесь, у вас есть блог или так, я бы хотел их посетить. :) –

+0

да, я начал программировать с «Acorn Atom» и «BBC Micro». sry в настоящее время не имеют моего блога. – bansi

Смежные вопросы