PHP преобразование строки в переменную не работает - PullRequest
0 голосов
/ 01 марта 2020

Это то, что я пытаюсь:

class CategoryController extends Controller{
public $productsOrders= [
    1=> 'product_order_number',
    2=> 'product_name',
    3=> 'product_name',
    4=> 'created_at'
];
public $categoriesOrders= [
    1=> 'category_order_number',
    2=> 'category_name',
    3=> 'category_name',
    4=> 'created_at'
];
public $orderDesc = [
    3, 4
];
public static function getOrder($type){
    $orderId=  request()->order;
    $curOrders = ${$type.'Orders'};
    return $curOrders[$orderId ?? 1] ?? $curOrders[1];
}
}

Но когда я проверяю это с помощью CategoryController::getOrder('products'), я получаю обратно:

PHP Notice:  Undefined variable: productsOrders in CategoryController

Почему это происходит? Объем публикации c. Если я переместу их внутрь функции, она будет работать ...

Ответы [ 3 ]

2 голосов
/ 01 марта 2020

getOrder - это метод stati c, и вы пытаетесь получить доступ к переменной non-stati c, эта ошибка возникает. ${$type.'Orders'} также является локальной переменной функции, это не переменная класса.

попробуйте

class CategoryController extends Controller{
    public static $productsOrders= [
        1=> 'product_order_number',
        2=> 'product_name',
        3=> 'product_name',
        4=> 'created_at'
    ];
    public static $categoriesOrders= [
        1=> 'category_order_number',
        2=> 'category_name',
        3=> 'category_name',
        4=> 'created_at'
    ];
    public $orderDesc = [
         3, 4
    ];
    public static function getOrder($type){
         $orderId=  request()->order;
         $curOrders = self::${$type.'Orders'};
        return $curOrders[$orderId ?? 1] ?? $curOrders[1];
   }
}

, теперь вызывайте ее

CategoryController::getOrder('products')
1 голос
/ 01 марта 2020

Вы используете $curOrders = ${$type.'Orders'}; т.е. переменную $ productsOrders в функции класса, поэтому вы получаете PHP Notice: Undefined variable: productsOrders in CategoryController.

Вам необходимо использовать ключевые слова php 'self или $this для доступа к свойствам класса (функции / переменные) внутри класса. Вот примеры использования обоих этих ключевых слов:

1. self::$productsOrders;
2. $this->productsOrders;
1 голос
/ 01 марта 2020

Оказывается, это потому, что метод static, но не атрибуты класса, вам просто нужно добавить static к объявлению атрибутов

public static $productsOrder= [ ... ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...