我是PHP新手,非常感谢命名空间的一些帮助。 我有一个类,它被声明为:
namespace P3;
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff {
}
现在我想实现一个名为CodeSniffer_Sniff
的接口。所以我将类声明修改为:
namespace P3;
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff extends CodeSniffer_Sniff {
}
但是当我运行代码时,我得到了
Fatal error: Interface 'P3\CodeSniffer_Sniff' not found in /root/qa/CardstreamCodingStandard/Sniffs/Classes/ClassDeclarationSniff.php
请有人解释发生了什么事吗?以及正确的语法应该是什么?
由于
好一些细节 我继承了这个实现phpcs嗅探的代码
我的班级被宣布为
namespace CardstreamCodingStandard\Sniffs\Classes;
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff implements PHP_CodeSniffer_Sniff {
}
当我用这个嗅探器运行phpcs然后我收到错误
PHP Fatal error: Interface 'CardstreamCodingStandard\Sniffs\Classes\PHP_CodeSniffer_Sniff' not found in /root/qa/CardstreamCodingStandard/Sniffs/Classes/ClassDeclarationSniff.php on line 23
PHP Stack trace:
PHP 1. {main}() /usr/bin/phpcs:0
PHP 2. PHP_CodeSniffer_CLI->runphpcs() /usr/bin/phpcs:25
PHP 3. PHP_CodeSniffer_CLI->process() /usr/share/pear/PHP/CodeSniffer/CLI.php:113
PHP 4. PHP_CodeSniffer->initStandard() /usr/share/pear/PHP/CodeSniffer/CLI.php:956
PHP 5. PHP_CodeSniffer->registerSniffs() /usr/share/pear/PHP/CodeSniffer.php:594
PHP 6. include_once() /usr/share/pear/PHP/CodeSniffer.php:1409
我希望这会让事情变得更清楚
答案 0 :(得分:1)
有关如何使用命名空间的一些详细信息,请参阅php manual。
在您的情况下,您似乎使用相同的命名空间。
要正确使用界面,您必须在课程中实现它。 正确使用如下:
Class Apple implements Fruit { ... }
有关界面以及如何使用它们的更多信息can be found here。
您正在使用extends
关键字,该关键字用于创建父类的子类。
关于父类和子类的php手册(称为继承)has been linked here
答案 1 :(得分:0)
你可以遵循这个角色:
file1:
<?php
namespace foo;
class Cat {
public function says(){
echo 'meoow';
}
}
?>
file2:
<?php
include 'file1.php';
use foo;
class bar extends foo{
//......
}
答案 2 :(得分:0)
您必须实现一个接口,而不是扩展。试试这个:
class CardstreamCodingStandard_Sniffs_Classes_ClassDeclarationSniff implements CodeSniffer_Sniff {
}