PHP - 在另一个类中调用函数 - >功能

时间:2011-11-18 17:09:38

标签: php

我正在尝试这样做:

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

然后使用此功能 * INSIDE of another class *

function formValidate($string){
  $string = trim($string);
  $string = mysql_real_escape_string($string);
  return $string;
}
//

.. on $ 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函数除此之外工作正常:-) **

3 个答案:

答案 0 :(得分:2)

您需要实例化该验证类,并且一旦实例化,您将需要使用您的值参数在该类中调用该函数。

在您的editProvider中,您可以:

$validator = new validate();
$val = $validator->formValidate($val);

如果上述方法无效,请尝试以下操作:

$val = mysql_real_escape_string(trim($val));

并查看它是否有效,如果有,则与未调用的正确函数有关。

答案 1 :(得分:1)

不确定为什么你如此倾向于使用$ this和静态实现。 IMO,静态调用使这段代码更容易。如果您真的想要从数据库类访问$this->formValidatString(),则必须执行class database extends 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;
    }
}

答案 2 :(得分:0)

您无需为此目的拥有实例。只需validate::formValidate($val);