使用PHP函数时,类中是否存在_?
我正在使用OpenCart并安装模块size.xml,它编辑catalog/product/model/catalog/product.php文件 它增加了一个类方法 我对函数中的某些代码有问题:使用PHP函数时,类中是否存在_?,php,class,function,Php,Class,Function,我正在使用OpenCart并安装模块size.xml,它编辑catalog/product/model/catalog/product.php文件 它增加了一个类方法 我对函数中的某些代码有问题: class ModelCatalogProduct extends Model { public function getSizes($product_id) { ... } // end function } // end class 我们总是得到一个错误,说我们
class ModelCatalogProduct extends Model {
public function getSizes($product_id) {
...
} // end function
} // end class
我们总是得到一个错误,说我们不能重新声明getSizes方法
我想强制重新声明,或者在调用方法之前检查函数是否存在,但我不能使用类中存在的函数
这似乎是违法的
class ModelCatalogProduct extends Model {
// This throws up an error
if (function_exists('getSizes')==FALSE) {
public function getSizes($product_id) {
} // end function
}// end if
} // end class
它将抛出一个错误问题。但我需要里面的函数
我想使用该类中存在的函数\或者强制重新声明该方法
如何使函数在类中工作?在方法之外的类中不能有可执行代码,因此无法按要求执行,因为if条件需要在类体中 因此,不管其他人怎么说,方法_的存在并不是这个问题的合适答案 如果您收到一个错误,说明该方法已经声明,那么可能有以下几个原因: 它实际上已经在同一类的其他地方声明了。在这种情况下,当然不能重新申报。但是由于类的代码应该都在一个文件中,因此应该很容易看到并避免这样做 它在父类中声明,即在您的案例模型或其父类之一中声明 在正常情况下,您应该能够重新声明已在父类中声明的方法;您的方法将重写父类中同名的方法。所以在大多数情况下,你的整个问题完全没有必要 但是你说你有错误,所以很明显有些地方出了问题,如果你告诉我们确切的错误信息,这会有所帮助,但我认为这可能不起作用有两个原因: 如果父类中的方法被声明为Final,则表示父类的作者明确不希望重写它。这意味着您不能拥有自己的同名方法 如果父类中的方法具有不同的签名-例如,它在父类中是私有的,但在您的类中是公共的,或者在一个类中是静态的,但在另一个类中不是,那么您将收到错误抱怨。在这种情况下,您需要确保这些方法具有相同的签名,或者为您的方法指定不同的名称
希望这能有所帮助。您不能在方法之外的类中包含可执行代码,因此无法执行您所要求的操作,因为您的if条件需要在类主体中 因此,不管其他人怎么说,方法_的存在并不是这个问题的合适答案 如果您收到一个错误,说明该方法已经声明,那么可能有以下几个原因: 它实际上已经在同一类的其他地方声明了。在这种情况下,当然不能重新申报。但是由于类的代码应该都在一个文件中,因此应该很容易看到并避免这样做 它在父类中声明,即在您的案例模型或其父类之一中声明 在正常情况下,您应该能够重新声明已在父类中声明的方法;您的方法将重写父类中同名的方法。所以在大多数情况下,你的整个问题完全没有必要 但是你说你有错误,所以很明显有些地方出了问题,如果你告诉我们确切的错误信息,这会有所帮助,但我认为这可能不起作用有两个原因: 如果父类中的方法被声明为Final,则表示父类的作者明确不希望重写它。这意味着您不能拥有自己的同名方法 如果父类中的方法具有不同的签名-例如,它在父类中是私有的,但在您的类中是公共的,或者在一个类中是静态的,但在另一个类中不是,那么您将收到错误抱怨。在这种情况下,您需要确保这些方法具有相同的签名,或者为您的方法指定不同的名称
希望能有所帮助。正确选择了@Spudley的答案
只是在回答中提到的第一个例子:如果你想声明一个类的方法里面的函数,你也应该考虑类的命名空间:
class MyClass
{
function myFunction()
{
//here, check if the function is defined in the root namespace globally
// or in the current namespace:
if(!function_exists('someFunction')
&& !function_exists(__NAMESPACE__ . '\someFunction'))
{
function someFunction()
{
}
}
//....
someFunction();
}
}
如果不检查If的第二个条件,多次调用myFunction将引发异常正确选择@Spudley的答案作为正确答案
只是在回答中提到的第一个例子:如果你想声明一个类的方法里面的函数,你也应该考虑类的命名空间:
class MyClass
{
function myFunction()
{
//here, check if the function is defined in the root namespace globally
// or in the current namespace:
if(!function_exists('someFunction')
&& !function_exists(__NAMESPACE__ . '\someFunction'))
{
function someFunction()
{
}
}
//....
someFunction();
}
}
如果你不检查一下s
if的第二个条件是,多次调用myFunction将引发异常方法\u存在-如果您声明声明该方法时遇到的实际错误,而不是它所说的近似值,则会有所帮助。可能会将此方法设置为?解析错误:语法错误,意外的T\u if,文件中应包含T\u函数/vq2-catalog\u model\u catalog\u product.php第743行错误在缓存文件中,但我跟踪到了这个文件。method\u exists-如果您在声明方法时声明了实际的错误,而不是它所说的近似值,这会有所帮助。也许可以将此方法设置为?解析错误:语法错误,意外的T\u if,文件中应为T_函数/第743行的vq2-catalog\u model\u catalog\u product.php错误在缓存文件中,但我跟踪到了该文件。是的,我将检查sizes.xml文件,看看OpenCart模块是否在parentFatal错误中安装了一个文件:无法在目录/vq2-catalog\u model\u catalog\u product.php的第762行重新声明ModelCatalogProduct::getSizes。我刚刚注释掉了该方法,稍后会修复它。我很想知道我提到的哪些可能性是你的问题的原因。是的,我将检查sizes.xml文件,看看OpenCart模块是否在parentFatal错误中安装了一个文件:无法在目录/vq2-catalog\u model\u catalog\u product.php的第762行重新声明ModelCatalogProduct::getSizes。我刚刚注释掉了该方法,稍后会修复它。我很想知道我提到的哪些可能性是导致您的问题的原因。