我正在学习面向对象的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;
}
}
}
?>