Как выполняются функции в классе - PullRequest
0 голосов
/ 06 июня 2011

Это может быть простой вопрос, но я не смог найти ответ ..

Если у меня есть класс, и я объявляю значение переменной внутри функции, вызываемой из оператора while, а затем использую эту переменную позже в другой функции, когда эта переменная изменяется на следующее значение в массиве?

то есть .. Я знаю, что php выполняет код сверху вниз, но верно ли это для классов и функций, вызываемых из с помощью другой функции. Неужели php ждет перехода к следующему элементу в операторе while, пока не будут вызваны все функции и подфункции, или он вызывает функцию, а затем переходит к следующему элементу в списке ??

class myClass{
     public $cust;

     function __construct(){
        $sql = mysql_query("SOME QUERY");
        while($row = mysql_fetch_array($sql)){
            myClass::sendEmail();
        }
     }

     function sendEmail(){
    $this->cust = new selectDatabase();
    $this->cust->table = "customer_main";
    $this->cust->where = " WHERE customerID = '".$customerID."' ";
    $this->cust->getItems();

    $this->cust->name = $name;
    $this->cust->email = $email;     

            $sql = mysql_query("SELECT EmailTo, EmailFrom, EmailSubject, EmailBody
                                FROM system_email");
            $row = mysql_fetch_assc($sql);

            $to = myClass::dbReplace($row['EmailTo']);
            $From = myClass::dbReplace($row['EmailFrom']);
            $subject = myClass::dbReplace($row['EmailSubject']);
            $body = myClass::dbReplace($row['EmailBody']);

    $headers = "From: ".$from." \r\n";
    $headers .= "Content-type: text/html\r\n";
    $headers .= "Bcc: stoneops@cornell.edu\r\n";
    $headers .= "X-Mailer: PHP/" . phpversion();

    mail( $to, $subject, $body, $headers);


     }
private function dbReplace($thisStr){
    $x = substr_count($thisStr,"DB[");
    $z = 0;
        $holdArry = array();
        while($z < $x){
            $rplStr = genEmail::findSubStr($thisStr);
            $t = substr_count($thisStr, "DB[".$rplStr."]");
            $rplStr2 = split(':', $rplStr);
            $thisStr = str_replace("DB[".$rplStr."]", $this->{$rplStr2[0]}->{$rplStr2[1]}, $thisStr);
            $z = $z +$t;
        }
    return $thisStr;
}

private function findSubStr($str){
    $pos = strpos($str, 'DB['); // outputs ER@EXAMPLE.com
    $pt1 = substr($str, ($pos + 3) );
    $pos = strpos($pt1, ']');
    $pt2 = substr($pt1, -1 * strlen(substr($pt1, $pos)));
    $pt2 = str_replace($pt2, "", $pt1);
    return $pt2;
}
}

Ответы [ 3 ]

1 голос
/ 06 июня 2011
  • Как правило, он будет выполняться сверху вниз, один за другим через последовательность кода.

  • Если существуют функции и методы,PHP-интерпретатор пометит их, но они не будут выполнены, если они не будут вызваны откуда-либо еще.

  • Однажды вызванная функция или метод будут выполняться сверху до return заявление.Когда он завершит возврат или выполнение некоторых заданий, будет достигнут и выполнен следующий элемент.

1 голос
/ 06 июня 2011

Выполнение выполняется в том порядке, в котором они вызваны, поэтому это последовательный порядок.Это синхронно, так что да, PHP будет ждать, пока функция и ее подфункции вернутся, прежде чем она перейдет к следующей.Это называется стек вызовов .

Если бы это было не так, у вас было бы много условий гонки с вашей стороны, что сделает программирование практически невозможным.

0 голосов
/ 06 июня 2011

Последовательное исполнение.Таким образом, он будет выполнять каждую функцию / оператор по порядку сверху вниз, ожидая завершения каждой функции / оператора перед вызовом следующего, затем он достигнет конца цикла и начнется снова с начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...