PHP-在另一个类中调用函数->;功能
我正在尝试这样做:PHP-在另一个类中调用函数->;功能,php,Php,我正在尝试这样做: class database { function editProvider($post) { $sql = "UPDATE tbl SET "; foreach($post as $key => $val): if($key != "providerId") { $val = formValidate($val); $s
class database {
function editProvider($post)
{
$sql = "UPDATE tbl SET ";
foreach($post as $key => $val):
if($key != "providerId")
{
$val = formValidate($val);
$sqlE[] = "`$key`='$val'";
}
endforeach;
$sqlE = implode(",", $sqlE);
$where = ' WHERE `id` = \''.$post['id'].'\'';
$sql = $sql . $sqlE . $where;
$query = mysql_query($sql);
if($query){
return true;
}
}
//
}//end class
然后在另一个类内使用此函数*:
function formValidate($string){
$string = trim($string);
$string = mysql_real_escape_string($string);
return $string;
}
//
。。在$val上。为什么不起作用?若我写在表单的一个字段中,它根本并没有逃逸任何东西。这怎么可能
*更新*
handler.php:
if(isset($_GET['do'])){
if($_GET['do'] == "addLogin")
{
$addLogin = $db->addLogin($_POST);
}
if($_GET['do'] == "addProvider")
{
$addProvider = $db->addProvider($_POST);
}
if($_GET['do'] == "editProfile")
{
$editProfile = $db->editProfile($_POST);
}
if($_GET['do'] == "editProvider")
{
$editProvider = $db->editProvider($_POST);
}
}
//end if isset get do
**editProvider函数工作正常,除了:-)**您需要实例化该验证类,并且在实例化之后,您需要使用值参数在该类中调用该函数 在editProvider中,您可以有:
$validator = new validate();
$val = $validator->formValidate($val);
如果上述操作不起作用,请尝试以下操作:
$val = mysql_real_escape_string(trim($val));
查看它是否有效,如果有效,则与未调用的正确函数有关。您需要实例化该验证类,并且在实例化之后,您需要使用值参数在该类中调用该函数 在editProvider中,您可以有:
$validator = new validate();
$val = $validator->formValidate($val);
如果上述操作不起作用,请尝试以下操作:
$val = mysql_real_escape_string(trim($val));
并查看它是否有效,如果有效,则与未调用正确的函数有关。您不需要有用于此目的的实例。只需执行
validate::formValidate($val)代码>为此,您不需要有实例。只需执行validate::formValidate($val)代码>不知道为什么您如此热衷于使用$this而不是静态实现。在我看来,静态调用使这段代码更加容易。如果确实希望从数据库类访问$this->formValidatString()
,则必须执行类数据库扩展MyOtherClass
下面是执行静态调用的简单程度:
class database {
public function editProvider($post)
{
$sql = "UPDATE tbl SET ";
foreach($post as $key => $val):
if($key != "providerId")
{
$val = MyOtherClass::formValidate($val);
$sqlE[] = "`$key`='$val'";
}
endforeach;
$sqlE = implode(",", $sqlE);
$where = ' WHERE `id` = \''.$post['id'].'\'';
$sql = $sql . $sqlE . $where;
$query = mysql_query($sql);
if($query){
return true;
}
}
}//end class
class MyOtherClass
{
public static function formValidate($string) {
if (strlen($string) < 1) {
throw new Exception('Invalid $string ' . $string . ');
}
$string = trim($string);
$string = mysql_real_escape_string($string);
return $string;
}
}
类数据库{
公共函数编辑器提供程序($post)
{
$sql=“更新tbl集合”;
foreach($key=>$val):
如果($key!=“providerId”)
{
$val=MyOtherClass::formValidate($val);
$sqlE[]=“`$key`='$val'”;
}
endforeach;
$sqlE=内爆(“,”,$sqlE);
$where='where`id`=\'.$post['id'.\''.';
$sql=$sql.$sqlE.$where;
$query=mysql\u查询($sql);
如果($query){
返回true;
}
}
}//末级
类MyOtherClass
{
公共静态函数formValidate($string){
if(strlen($string)<1){
抛出新异常('Invalid$string'.$string');
}
$string=修剪($string);
$string=mysql\u real\u escape\u string($string);
返回$string;
}
}
不知道为什么您会如此热衷于使用$this而不是静态实现。在我看来,静态调用使这段代码更加容易。如果确实希望从数据库类访问$this->formValidatString()
,则必须执行类数据库扩展MyOtherClass
下面是执行静态调用的简单程度:
class database {
public function editProvider($post)
{
$sql = "UPDATE tbl SET ";
foreach($post as $key => $val):
if($key != "providerId")
{
$val = MyOtherClass::formValidate($val);
$sqlE[] = "`$key`='$val'";
}
endforeach;
$sqlE = implode(",", $sqlE);
$where = ' WHERE `id` = \''.$post['id'].'\'';
$sql = $sql . $sqlE . $where;
$query = mysql_query($sql);
if($query){
return true;
}
}
}//end class
class MyOtherClass
{
public static function formValidate($string) {
if (strlen($string) < 1) {
throw new Exception('Invalid $string ' . $string . ');
}
$string = trim($string);
$string = mysql_real_escape_string($string);
return $string;
}
}
类数据库{
公共函数编辑器提供程序($post)
{
$sql=“更新tbl集合”;
foreach($key=>$val):
如果($key!=“providerId”)
{
$val=MyOtherClass::formValidate($val);
$sqlE[]=“`$key`='$val'”;
}
endforeach;
$sqlE=内爆(“,”,$sqlE);
$where='where`id`=\'.$post['id'.\''.';
$sql=$sql.$sqlE.$where;
$query=mysql\u查询($sql);
如果($query){
返回true;
}
}
}//末级
类MyOtherClass
{
公共静态函数formValidate($string){
if(strlen($string)<1){
抛出新异常('Invalid$string'.$string');
}
$string=修剪($string);
$string=mysql\u real\u escape\u string($string);
返回$string;
}
}
您在哪里声明了这两个函数(在不同的类中)?很难看出问题是什么,因为您说它在类中调用函数,但您只提供了两个函数,没有提供类。很难看到作用域,您也可以尝试在formValidate函数的开头和结尾放置一个echo,以查看它是否真的在调用它。请尝试并提供此调试信息。谢谢我添加了不同的类,函数在其中。editProvider位于类数据库内,formValidate位于类验证内。这对你有帮助吗?是的,请看何塞·维加的评论。希望有帮助!但是只是一个旁注——如果你把validate作为一个简单的函数,而不是把它放到一个类中,你本来可以做你原来做的事情,但是把它放到一个类中会迫使你实例化这个类,希望这就是你想要的。还可以看到静态调用函数:但我正在尝试使用$this->。。我只是觉得它必须在课堂上,因为你开始谈论它。现在它不在类内,但仍然不能使用$this->您在哪里声明了这两个函数(在不同的类中)?很难看出问题是什么,因为您说它在类内调用函数,但您只提供了两个函数,没有提供类。很难看到作用域,您也可以尝试在formValidate函数的开头和结尾放置一个echo,以查看它是否真的在调用它。请尝试并提供此调试信息。谢谢我添加了不同的类,函数在其中。editProvider位于类数据库内,formValidate位于类验证内。这对你有帮助吗?是的,请看何塞·维加的评论。希望有帮助!但是只是一个旁注——如果你把validate作为一个简单的函数,而不是把它放到一个类中,你本来可以做你原来做的事情,但是把它放到一个类中会迫使你实例化这个类,希望这就是你想要的。还可以看到静态调用函数:但我正在尝试使用$this->。。我只是觉得应该在课堂上,因为你开始谈论