我只是自己学习PHP,我有一个问题,希望你能帮忙。
拳头风格
<?php
class Fist_style
{
function method_1()
{
global $a;
return $a + 1;
}
function method_2()
{
global $a;
return $a - 1;
}
function method_3()
{
$call_1 = $this->method_1();
$call_2 = $this->method_2();
}
// In this case, how many times $a was called?
}
第二种风格
<?php
class Second_style
{
function method_1($a)
{
return $a + 1;
}
function method_2($a)
{
return $a - 1;
}
function method_3()
{
global $a;
//I will call both method_1 and method_2
$call_1 = $this->method_1($a);
$call_2 = $this->method_2($a);
//............
}
// In this case, how many times $a was called
}
?>
问题在我的代码中,开发时哪种风格会更好?
答案 0 :(得分:1)
使用全局变量通常会导致灾难 - 因为许多有经验的人都乐意告诉你。
在类中使用状态的正常方法是声明一个类属性:
<?
class MyClass
{
public $a;
function __construct($valueForA) {
$this->a = $valueForA;
}
function increment()
{
$this->a += 1;
}
function decrement()
{
$this->a -= 1;
}
function plusminus()
{
$this->increment();
$this->decrement();
}
}
可以这样使用:
$anInstance = new MyClass(10); // sets a to 10 by calling the __construct method
$anInstance->increment();
echo($anInstance->a); // 11
$anInstance->decrement();
echo($anInstance->a); // 10
在PHP here中阅读有关oop的更多信息。
至于代码中的问题,$a
不是一种方法,因此无法调用。
此外,return $a -1;
不会更改全局$a
(不确定是否有意)。
修改:
如果您有像
这样的功能增量function increment ($var) {
$var = $var - 1;
return $var;
}
然后$var
作为值传入 - 如果你传入5
,php只关心5
,而不是名字。例如:
$a = 5;
$incremented = increment($a);
echo($a); // echoes 5;
echo($incremented); //echoes 6
我建议在php中阅读scoping。