function set_firstname($firstname){
// some code here
}
function fullname($lastname){
$firstname = set_firstname();
return $firstname." ".$lastname;
}
set_firstname("Rajesh");
echo fullname("Dhar"); // Rajesh Dhar
echo fullname("Basu"); // Rajesh Basu
echo fullname("Niyogi"); // Rajesh Niyogi
set_firstname("Sharmila");
echo fullname("Sen"); // Sharmila Sen
echo fullname("Chatterjee"); // Sharmila Chatterjee
echo fullname("Pal"); // Sharmila Pal
如何定义函数set_firstname
以使上述代码正常工作?
答案 0 :(得分:1)
function set_firstname($name = "") {
static $_name;
if($name != "") {
$_name = $name;
} else {
return $_name;
}
}
虽然我不得不承认,这是非常糟糕的编码风格。 (我的意见)
答案 1 :(得分:1)
您必须使用类,您可以在其中存储属于该类的变量。例如,
class Person
{
protected $_Firstname;
protected $_Lastname;
public function __construct($firstname, $lastname)
{
// set the initial first- and lastname
$this->_Firstname = $firstname;
$this->_Lastname = $lastname;
}
public function __toString()
{
return sprinft("%s %s", $this->_Firstname, $this->_Lastname);
}
public function SetFirstname($value)
{
$this->_Firstname = $value;
}
}
// create a new instance of a person
$p = new Person("Rajesh", "Dhar");
echo $p; // will display: "Rasjeh Dhar"
$p->SetFirstname("Sharmila");
echo $p; // will display: "Sharmila Dhar"
答案 2 :(得分:1)
更新
您似乎正在寻找一种方式来影响/更改函数的行为,方式date_default_timezone_set
会影响date
函数的行为。答案很简单:你不能......不是真的。你想到的功能实际上并没有改变其他功能。他们更改了运行时(ini设置等),而其他函数用来计算各自的返回值的是 runtime 。
想象date_default_timezone_set
乘坐飞机:你可以飞到位于不同时区的世界的一部分,你的生物钟将适应(一段时间后)到另一个时区,你甚至会设置你的时钟不同。但是你的 house ,你的生日以及所有其他的东西都不会改变。您在任何给定时间的位置是“运行时”,并且它易于更改。这些变化可能会导致您的行为/反应不同,但实际上并不会改变您的身份......
使用常规函数,可以使用static
个变量:
function firstname($name = null)
{
static $return = 'Default';
$return = $name ? $name : $return;
return $return;
}
function fullName($name)
{
return firstname().' '.$name;
}
//test:
echo fullName('foobar');//echoes Default foobar
firstname('Mr. ');
echo fullName('foobar');//echoes Mr. foobar
但是说实话, 不是开展业务的好方法。它难以维护,难以阅读且容易出错。说实话,如果您需要用户必须提供的2位数据,那么向用户询问这两个值时确实存在 nothing 错误:
function fullName($first, $last)
{
return $first.' '.$last;
}
但是,为什么要使用功能呢? 更一般地说,您实际上正在寻找将州与功能结合的方法。幸运的是:类就是这样(将数据与方法结合起来)。然后,“更好”或更合乎逻辑的方法是:
class Name
{
protected $firstName = null;
protected $lastName = null;
public function __construct($first = 'Default', $last = null)
{
$this->firstName = $first;
$this->lastName = $last;
}
public function getFullName($last = null, $first = null)
{
if ($last) $this->lastName = $last;
if ($first) $this->firstName = $first;
return $first.' '.$last;
}
}
这里的类的额外好处,虽然我没有在我的示例中包含这个,但是你可以检查传递给方法的值,并且你可以过滤掉无效的输入。诸如is_string
,正则表达式验证,filter_var
调用之类的内容......
除此之外,随着项目的增长,您可以非常轻松地详细说明给定的类,例如添加protected $email = null
属性,以及执行filter_var($email, FILTER_VALIDATE_EMAIL)
的setter以确保设置有效的电子邮件地址,你有一个很好的小数据容器,它可以容纳与一个人相关的各种数据,因为它在你的数据库中表示,并在你的其余代码中使用。
答案 3 :(得分:0)
$first_name = '';
function set_firstname($firstname){
global $first_name;
$first_name = $firstname;
}
function fullname($lastname){
global $first_name;
return $first_name ." ".$lastname;
}