首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP5.3中的MethodNotFound行为

PHP5.3中的MethodNotFound行为
EN

Stack Overflow用户
提问于 2020-09-09 02:28:35
回答 1查看 23关注 0票数 0

我不是一个PHP开发人员,但我已经交给了一些遗留的PHP代码,我必须修复错误。我将用C#重写这段代码,所以我只需要理解为什么它在我认为应该失败的时候没有失败。

首先,实例化一个数据库对象并构建一个SQL查询:

代码语言:javascript
复制
$dbh = new PDO('pgsql:dbname=' . $dbname . ';host=' . $host, $dbuser, $dbpass, array(
    PDO::ATTR_PERSISTENT => true
));

$db2 = new PDO('pgsql:dbname=' . $dbname . ';host=' . $host, $dbuser, $dbpass, array(
    PDO::ATTR_PERSISTENT => true
));
$sql = "select b.uniqueid,b.name,";
$sql .= " a.id,a.servertime,a.devicetime,a.latitude,a.longitude,speed,course,accuracy";
$sql .= " from tc_positions a, tc_devices b";
$sql .= " where a.deviceid = b.id and a.processed = 0";
$sql .= " order by a.devicetime";

然后,执行SQL查询,并分别处理记录:

代码语言:javascript
复制
$stmt = $dbh->query($sql);
$x = 0;
while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $x++;
    try {
        $gps = new GpsDevice(array('identity' => $data['uniqueid']));
    } catch (fNotFoundException $e) {
        $gps = new GpsDevice();
        $gps->setIdentity($data['uniqueid']);
        $gps->setComments('Tracker->' . $data['name']);
        $gps->store();
    }

    // begin functions under question
    $loc = new GpsDeviceLocation();
    $loc->setGpsDeviceId($gps->getGpsDeviceId());
    $loc->setCreated($data['devicetime'] . ' +00');
    $loc->setReceived($data['servertime'] . ' +00');
    $loc->setLat($data['latitude']);
    $loc->setLon($data['longitude']);
    $loc->setHeading($data['course']);
    $loc->setSpeed($data['speed'] / 1.60934);
    $loc->setAccuracy($data['accuracy']);
    // end functions in question

    $loc->store();
    $loc->free();
    $loc = null;
    $gps->free();
    $gps = null;
    print($data['uniqueid'] . "\n");


    $sql2 = 'update tc_positions set processed = 1 where id = ' . $data['id'];

    $db2->query($sql2);
}

因为我不是PHP开发人员,所以我只能依靠我有限的PHP知识和PHPStorm来帮助我理解正在发生的事情。将$loc设置为GpsDeviceLocation的一个新实例,该实例是一个类,构建方式如下:

代码语言:javascript
复制
// using flourish-classes
class GpsDeviceLocation extends fActiveRecord { }

我不明白的是,当这个位被调用时,$loc->setGpsDeviceId($gps->getGpsDeviceId()); (以及其他有问题的方法),没有匹配的方法。通常,在Python或C#中,在执行或编译时会抛出一个异常,但代码没有抛出任何错误,脚本正在按预期运行,我已经在下游数据库中验证了记录正在按预期进行处理。我已经搜索了代码库,除了该文件之外,没有任何方法的引用。

我觉得应该抛出一个异常,但没有。据我所知,这段代码应该失败,但它没有,我不明白为什么。PHP 5.3中缺少方法的行为是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-09-09 02:49:28

通过方法和约定的名称,它使用Symfony 1或类似的东西是有问题的。它是一个PHP框架,它有一些自定义的函数,比如getGpsDeviceId,这个框架知道它需要返回字段gps_device_id或id_device_gps,它们使用的是旧的ORM,这些函数都是自动创建的。PHP Storm可能不会告诉你代码在哪里,因为它是一个非常古老的东西,人们没有开发一个插件来回溯它。要了解应用程序正在做什么,我建议您查找描述架构的文件,如composer.json或require()函数,在找到框架后,您可以查看官方网站上的文档。

Symfony 1的示例:https://symfony.com/legacy/doc/gentle-introduction/1_4/en/01-Introducing-Symfony

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63799678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档