是否允许在OOP PHP方法中使用过程函数?


Is it allowed to use procedural functions inside OOP PHP methods?

我正在学习面向对象的PHP,我想知道是否允许在方法内部使用过程函数。

例如,在WordPress中,你有一个函数get_option();从选项数据库表中按名称获取值。是否允许这样做:

class ExampleClass {
   public static function ExampleMethod( $optionName ) {
      if( get_option( $optionName ) ) {
         return get_option( $optionName ) + 20;
      }     
   }
}

是否允许在OOP PHP方法中使用过程函数?

第一个问题是,这可能吗?为什么我们不试试呢:

class A {
    public static function randomStaticMethod() {
        echo "Function call:" . phpversion();
    }
    public function randomMethod() {
        echo "Function call:" . phpversion();
    }
}
$o = new A();
$o->randomMethod();
A::randomStaticMethod();

你会看到它会像预期的那样工作,没有错误没有警告,只是:

Function call: ...
Function call: ...

所以这绝对是可能的。现在回答你的问题:允许吗?

简单的问题,可以回答你的问题:

你怎么得到一个字符串的长度,当你不允许使用函数像strlen()在一个类?

所以,是的,它也是绝对允许和使用的。


现在有一些其他的事情,可能是有用的知道。如果您使用名称空间,则必须小心。

为例:

namespace I_AM_A_NAMESPACE;
function strlen() {
    echo "nope";
}
echo strlen("xyz");
echo 'strlen("xyz");

你的输出将是:

nope
3

因此,如果您使用名称空间,您必须知道您在哪个名称空间中以及要调用哪个函数。所以,如果你想调用全局函数strlen(),你想采取保存路线,总是在它前面放一个',以确保你调用全局strlen()函数。

您可以使用下面的代码完全静态。我只是使用数字1作为参数,我使用Return 1作为示例代码,所以可以返回一些东西。我个人建议动态分配对象,特别是在系统内存有限的情况下,下面是我的代码:

<?php
echo ExampleClass::ExampleMethod(1);
exit();
class ExampleClass {
public static function get_option( $optionName ) {
    //do processing here
return 1;
}
public static function ExampleMethod( $optionName ) {
if( ExampleClass::get_option( $optionName ) ) {
    return ExampleClass::get_option( $optionName ) + 20;
}
}
}
?>