【问题标题】:command 'use' dont work in a custom function PHP but work on a template命令“使用”在自定义函数 PHP 中不起作用,但在模板上起作用
【发布时间】:2020-08-20 08:42:16
【问题描述】:

我对这个命令有疑问。我使用 Vimeo 的 API 来获取缩略图并且它可以工作: 我在 drupal 7 中工作,使用 Vimeo 的 API 和 php 并且工作正常。

require '/home/SSSSS/www/html/vendor/vimeo/vimeo-api/autoload.php';
    use Vimeo\Vimeo;
    $client = new Vimeo("XXXXX", "YYYYY", "ZZZZ");
    $response = $client->request('/videos/AAAAA/pictures', array(), 'GET');
    $imgg= $response["body"]["data"][0][sizes][0][link];

问题是当我尝试使用此代码执行功能时。

使用 Vimeo\Vimeo 时出现语法错误;

不认识这条路线或代码,为什么?我不明白,为什么对 template.php 有效,但对我的模块功能无效?

谢谢

PD:我专注于问题。问题是无法识别函数内部的函数“require”。 我解决了放线的问题 需要'/home/SSSSS/www/html/vendor/vimeo/vimeo-api/autoload.php'; 在我的功能之外,在我的 .module 的顶部。

有什么方法可以在函数内部做所有事情?

【问题讨论】:

  • 引用实际的错误信息,而不是给我们“Make a syntax error”
  • 您需要显示更多代码和实际错误消息,以便对这里的任何人都有意义。我建议你减少你的代码,直到它足以重现错误。然后与我们分享带有实际错误消息的修剪源代码。
  • 我们愿意提供帮助。但是你需要展示足够多的东西让人们有效地帮助你。

标签: php drupal drupal-7 vimeo vimeo-api


【解决方案1】:

我不认为require 电话是这里的问题。我猜这可能是您的use 电话有问题。而且根本没有必要将它放在任何函数中。

什么?我不需要每次通话都使用图书馆。为什么要把use放在上面?

首先您必须了解use 语句的作用:

使用别名或导入引用外部完全限定名称的能力是命名空间的一个重要特性。

它不会真正调用或加载任何东西。它只为您提供了一种在引用特定命名空间时编写更少代码的方法。例如,这个独立的 PHP 可以在没有命名空间或类的情况下工作:

<?php

use This\Do\Not\Exists;

echo Exists::class;

结果:

This\Do\Not\Exists

use 语句适用于文件范围。在函数范围内有 use 语句是没有意义的。这就是它无效的原因。在函数中使用use 语句会产生如下错误:

PHP Parse error:  syntax error, unexpected 'use' (T_USE) in /path/to/your/code.php on line XXX

解决方案非常简单。您可以将use 语句移出函数并移至.module 文件的顶部。这将简单地为所谓的有效命名空间声明一个别名。不会加载 Vimeo\Vimeo 类。因此,在您调用 new Vimeo("XXXXX", "YYYYY", "ZZZZ") 之前,自动加载器不需要是 require

将 use 语句放在 PHP 文件的顶部(namespace 行之后)实际上是PSR-2 指南中推荐的代码样式。


注意:在模块文件的顶部需要 Vimeo 自动加载器也没有问题。这只是在调用类时自动加载正确的 PHP 文件的一小段程序。您可以将这两行放在模块文件的顶部。

【讨论】:

  • 是的,非常感谢!就像我说的(并编辑我的帖子),我解决了将 require 放在模块文件顶部的函数之外的问题。 use 语句我已将其留在函数中并且工作正常。
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多