another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Как из одной функции передать значение в другую?

Код:
<?php
class Page_Portfolio extends Page_Basic
{
    function actionIndex() {
        $cms_class = cms_class::getInstance();
        $sql =  "SELECT * FROM site_portfoliotheme WHERE portfoliotheme_active='Y'";
        $menu = $cms_class->getRecords($sql, 3);
        
        $sql = "SELECT * FROM site_portfolio WHERE portfolio_active='Y' ORDER BY portfolio_id DESC";
        $viewportf = $cms_class->getRecords($sql, 150, "portfolio_image");
        
        return array("menu"=>$menu, "viewportf"=>$viewportf);
    }
    function actionHtml()
    {
        $cms_class = cms_class::getInstance();
        $sql = "SELECT * FROM site_portfolio WHERE portfolio_active='Y' AND portfolio_theme='".Router::$pageParams["html"]."'";    
	$records = $cms_class->getRecords($sql, 150, "portfolio_image");
        return array("records"=>$records, "menu"=>$menu);
        }
    }


Нужно передать из первой функции значение переменной $menu во вторую функцию, дабы там ее вернуть в массиве. Как это провернуть? Или же есть иной путь?
  • Вопрос задан
  • 7506 просмотров
Решения вопроса 2
Sander_Li
@Sander_Li
Backend developer
можно создать свойство $menu и обращаться через $this

<?php
class Page_Portfolio extends Page_Basic{

    private $menu;

    public function actionIndex() {
        $this->menu;
    }

    public function actionHtml(){
         $this->menu;
    }

}


Или, быть может, нужно что-то подобное
<?php
class Page_Portfolio extends Page_Basic{

    public function actionIndex() {

    }

    public function actionHtml(){
         $this->actionIndex();
    }

}
Ответ написан
IgorO2
@IgorO2
73
Можно использовать сессию, переменную как написал @Sander_Li , или просто вызвать ф-ию
$menu = $this->actionIndex();
$menu = $menu['menu'];
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@stasmarkin
Server side java engineer
Если ближе к ООП, то вот так, пожалуй:

<?php
<?php
class Page_Portfolio extends Page_Basic
{
    function actionIndex() {
        $sql = "SELECT * FROM site_portfolio WHERE portfolio_active='Y' ORDER BY portfolio_id DESC";
        $viewportf = cms_class::getInstance()->getRecords($sql, 150, "portfolio_image");
        return array("menu"=>$this->getMenu(), "viewportf"=>$viewportf);
    }
	
	function getMenu() {
		$cms_class = cms_class::getInstance();
		return $cms_class->getRecords($sql, 3);
	}
	
    function actionHtml()    {
        $cms_class = cms_class::getInstance();
        $sql = "SELECT * FROM site_portfolio WHERE portfolio_active='Y' AND portfolio_theme='".Router::$pageParams["html"]."'";    
		$records = $cms_class->getRecords($sql, 150, "portfolio_image");
        return array("records"=>$records, "menu"=>$this->getMenu());
        }
    }


А уж если надо оптимизировать, то можно "одним движением руки" кэшировать getMenu()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
05 мая 2024, в 23:43
8000 руб./за проект
05 мая 2024, в 23:39
3000 руб./за проект
05 мая 2024, в 23:36
3000 руб./за проект