Могу ли я вызвать библиотеку полос, если я храню ее как строку в переменной? - PullRequest
0 голосов
/ 17 апреля 2019

Мне бы хотелось иметь универсальную функцию для извлечения объектов с полосы (клиенты, подписки, купоны и т. Д.).

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

function stripe_retrieve_object($objectName,$objectId) {
    switch ($objectName) {
        case "coupon":
            $retrieveStripeCode = "\Stripe\Coupon::retrieve(\"$objectId\");";
            break;
        case "customer":
            $retrieveStripeCode = "\Stripe\Customer::retrieve(\"$objectId\");";         
            break;
        case "subscription":
            $retrieveStripeCode = "\Stripe\Subscription::retrieve(\"$objectId\");";
            break;
        default:
            echo "There was a generic error.  We were unable to retrieve payment data, and no updates to payment were made.  Please contact admin@email.com";
    } # switch ($objectName) {
    try {
        $stripeTry = eval($retrieveStripeCode);
        return $stripeTry;
    catch(\Stripe\Error\Card $e) { ... }
} # function stripe_retrieve_object($objectName,$objectId)

Я вижу в журналах на полосе, что выполняется вызов для извлечения объекта, но тело ответа пусто на полосовой панели и ничего не возвращается из $ stripeTry = eval ($ retrieveStripeCode); я попытался var_dump ($ stripeTry), и он вернулся NULL.

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете использовать функции переменных вместо eval().

Обратите внимание, что PHP 7.x требуется для использования 'ClassName::methodName' в качестве функций переменных.

function stripe_retrieve_object($objectName,$objectId) {
    $
    switch ($objectName) {
        case "coupon":
            $retrieveStripeCode = '\Stripe\Coupon::retrieve';
            break;
        case "customer":
            $retrieveStripeCode = '\Stripe\Customer::retrieve';        
            break;
        case "subscription":
            $retrieveStripeCode = '\Stripe\Subscription::retrieve';
            break;
        default:
            echo "There was a generic error.  We were unable to retrieve payment data, and no updates to payment were made.  Please contact admin@email.com";
    } # switch ($objectName) {
    try {
        $stripeTry = $retrieveStripeCode($objectId);
        return $stripeTry;
    catch(\Stripe\Error\Card $e) { ... }
}
...