可能重复:
PHP function Question
我之前提过这个问题,但我认为我没有提供足够的代码来回答这个问题。我绞尽脑汁,我无法弄明白。这是错误
我收到错误“致命错误:在第25行的/home/mjcrawle/public_html/processlogin2.php中调用未定义的方法person :: retrieve_full_name()”
Html页面Processlogin2.php页面:
<?php
/*include the class file*/
require_once('class/person_class.php');
$person = new Person;
/*instantiate the person object*/
$person->firstname = $_POST['firstname'];
$person->lastname = $_POST['lastname'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Process Login</title>
</head>
<body>
<p>
<?php
echo 'Your full name is ' . $person->retrieve_full_name() . '.';
?>
</p>
</body>
</html>
我创建的班级表单包括我的所有功能和属性等......
<?php
/*person*/
class person{
/*construct function*/
public function __contstruct() {
}/* This end the Construct Functions*/
public function __destructor() {
}
/*class attribute*/
private $lastname;
private $firstname;
/*get function */
public function __get($name){
return $this-> $name;
}/* This ends the Get Functions*/
/*This function is going to have to parameters with it. We are going to add the this attribute to it.*/
public function __set($name, $value) {
$this ->$name=$value;
}/* This ends the Set Functions*/
public function __retrieve_full_name() {
$fullname = $this->firstname . ' . ' . $this->lastname;
return $fullname;
}/* This ends the Full Name Function*/
}
?>
答案 0 :(得分:3)
您的功能名为__retrieve_full_name()
,您尝试拨打retrieve_full_name()
。它无法工作,你必须在课堂上重命名。
我认为你在PHP中误解了"magic" method的概念。 PHP中的所有类都已经定义了一些方法,这些方法称为魔术方法,所有方法都以__开头,以区别于您自己编写的方法。 __set(),__ get(),__ construct和__destruct()就是这样的方法。
如果我可以给你一个建议,如果你把它们留空,就没有必要声明一个构造函数或析构函数,你可以安全地从你的类中删除它们。
这是你的Personn类的新版本应该有效:
class person{
/*class attribute*/
private $lastname;
private $firstname;
/*get function */
public function __get($name){
return $this-> $name;
}/* This ends the Get Functions*/
/*This function is going to have to parameters with it. We are going to add the this attribute to it.*/
public function __set($name, $value) {
$this ->$name=$value;
}/* This ends the Set Functions*/
public function retrieve_full_name() {
return $this->firstname . ' . ' . $this->lastname;
}/* This ends the Full Name Function*/
}
答案 1 :(得分:0)
如果您参考here
只有特定时间才应考虑使用魔术方法。我相信你的__retrieve_full_name()不应该是这些例外之一。
除非您需要一些记录的魔术功能,否则建议您不要在PHP中使用带__的函数名。
希望这有帮助。