Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP函数时,类中是否存在_?_Php_Class_Function - Fatal编程技术网

使用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 我们总是得到一个错误,说我们

我正在使用OpenCart并安装模块size.xml,它编辑catalog/product/model/catalog/product.php文件

它增加了一个类方法

我对函数中的某些代码有问题:

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。我刚刚注释掉了该方法,稍后会修复它。我很想知道我提到的哪些可能性是导致您的问题的原因。