PHP 8.2 使用函数声明填充变量

PHP 8.2 fill variable with function declaration

提问人:Jilco Tigchelaar 提问时间:11/17/2023 更新时间:11/17/2023 访问量:53

问:

我对下面的代码部分感到困惑

$fp = function ($name) use ($adapter) {
        return $adapter->driver->formatParameterName($name);
    };

上面的代码中发生了什么,是填充变量的函数(声明)吗?

<?php

namespace School;

use Laminas\Db\Adapter\Adapter;
use Laminas\Db\Adapter\AdapterInterface;

class SchoolClass
{
public int $code = 0;
public string $name = '';

public function __construct(int $code = 0,string $name = '')
{
    $this->code = $code;
    $this->name = $name;
}

public function save(): bool
{
    $adapter = self::getAdapter();
    
    //vullen van een variabele met een functie?
    $fp = function ($name) use ($adapter) {
        return $adapter->driver->formatParameterName($name);
    };
    if (empty($this->code)){
        $statement = $adapter->query('INSERT INTO classes(name) VALUES (' . $fp('name') . ')');
        $params = ['name' => $this->name];
    } else {
        $statement = $adapter->query('UPDATE classes SET name=' . $fp('name') . ' WHERE code=' . $fp('code'));
        $params = [
            'code' => $this->code,
            'name' => $this->name
        ];
    }
    try {
        $statement->execute($params);
    } catch (\Exception $e) {
        error_log($e->getMessage());
        return false;
    }
    return true;
}

private static function getAdapter(): AdapterInterface
{
    $config = require (realpath(__DIR__ . '/../config') . '/config.php');
    $adapter = new Adapter($config['db']);
    return $adapter;
} 

}

PHP php-8.2

评论

3赞 deceze 11/17/2023
php.net/manual/en/functions.anonymous.php
2赞 DarkBee 11/17/2023
这看起来像是如何使用它的坏例子。 可以用 .此外,代码不应尝试“保护”变量免受 SQL 注入的影响,而应使用预准备语句$fp('name')$adapter->driver->formatParameterName('name')

答: 暂无答案