关于在类中调用PHP函数的一些解释

时间:2019-04-23 09:52:34

标签: php class zend-framework

我知道这是基本的php问题,但是我有一些我不了解的问题,它与调用函数时的type Pair<a, b> = { First: a, Second: b } 有关,下面的代码只是一个例子。

案例:return;中,当我执行检查然后返回时,TEST2会执行此工作并停止执行下一个代码return;

现在在TEST3中,我调用一个函数TEST1,此函数先检查然后重定向。问题是它返回shure,但是下一个代码也将执行_checkThat()TEST2为什么?为什么当我将该函数的内容直接放在TEST3中时,它会返回并停止执行下一个代码?

TEST1

其他问题,在这种情况下我可以使用<?php class Some_Class_IndexController extends Some_Other_Controller_Front_Action { $name = $this->getRequest()->getParam('name'); //Output: "john" $email = $this->getRequest()->getParam('email'); //Output: "john@gmail.com" $phone = $this->getRequest()->getParam('phone'); //Output: 09000000 //TEST1 if(isset($name)) { $this->_checkThat($name); } //TEST2 if(isset($email)) { if($email === "john@gmail.com") { //some code to redirect to another page return; } else { //some code to redirect to another page return; } } //TEST3 if(isset($name)) { $this->_checkthat(); } private function _checkThat($name) { if ($name !== "john") { //some code to redirect to another page return; } } } 吗?

continue;

2 个答案:

答案 0 :(得分:1)

尽管注释中已经提到您的示例代码不正确,但您的问题在这里:

if(isset($name)) {
    $this->_checkThat($name);
}

是您不执行任何操作,其中包含_checkThat()返回的结果。显然,您应该 return

if(isset($name)) {
    return $this->_checkThat($name);
}

作为旁注,我应该提到用_命名方法以将它们标记为protected / private的做法自php5起已经过时。

答案 1 :(得分:0)

这是一个简单的指南。

  

继承–以OOP方式重复使用代码

继承是面向对象编程中的一项基本功能/构造,您可以在其中使用一个类作为另一类或许多其他类的基础/基础。

为什么?

这样做可以有效地重用基类中找到的代码。

说,您想创建一个新的employee class,因为我们可以说employee是'person'的类型/种类,它们将共享通用的属性和方法。

有道理吗?

在这种情况下,继承可以使您的代码更轻便,因为您在两个不同的类中重复使用了相同的代码。但是与old-school PHP不同:

您只需输入一次密码。 实际被重用的代码可以在许多(无限)类中被重用 但这只是在概念上输入到一个地方,这有点 像PHP include()。

看看示例PHP代码:

// 'extends' is the keyword that enables inheritance
class employee extends person 
{
    function __construct($employee_name) {
        $this->set_name($employee_name);
    }
}
  

通过继承重用代码:

由于类employee是基于类person的,因此employee自动具有“ person”的所有公共和受保护的属性和方法。

书呆子注意:书呆子会说employee是一种人。

代码:

class employee extends person 
{
    function __construct($employee_name){
        $this->set_name($employee_name);
    }
}

请注意,即使我们没有在employee类中声明该方法,也可以在employee中使用set_name()。那是因为我们已经在类person中创建了set_name()。

书呆子注意:person类被(书呆子)称为base类或parent类,因为它是employee所基于的类。当您的项目变得更加复杂时,这种类层次结构可能会变得很重要。

  

通过继承重用代码:

如下面的代码片段所示,我们可以employee的名义在person对象上调用get_name。

代码:

<?phpinclude("class_lib.php"); ?>
    <?php
        // Using our PHP objects in our PHP pages. 
        $stefan = new person("Stefan Mischook");
        echo "Stefan's full name: " . $stefan->get_name();

        $james = new employee("Johnny Fingers");
        echo "---> " . $james->get_name();
    ?>

这是一个经典的示例,说明了OOP如何减少代码行数(不必两次编写相同的方法),同时又保持代码模块化并更易于维护。

  

覆盖方法1

有时(使用继承时),您可能需要更改基类中方法的工作方式。

例如,让我们说'employee'类中的set_name()方法必须执行与person类中不同的操作。

通过在override中声明相同的方法,您person类{_1}}的set_name()类。

代码段:

employee

请注意<?php class person { protected function set_name($new_name) { if ($new_name != "Jimmy Two Guns") { $this->name = strtoupper($new_name); } } } class employee extends person { protected function set_name($new_name) { if ($new_name == "Stefan Sucks") { $this->name = $new_name; } } } ?> 类中的set_name()与父类employee中发现的版本有何不同。

<< strong>替代方法:2

有时,您可能需要访问您在派生类(有时称为“子类”)中取代的方法的基类版本。

在我们的示例中,我们覆盖了person类中的set_name()方法。我现在有  使用此代码:

employee

访问set_name()方法的父类(人)版本。

代码:

hperson::set_name($new_name);

注意:使用符号:

<?php
    class person 
    {
        // explicitly adding class properties are optional - but 
        // is good practice
        var $name;   
        function __construct($persons_name) {
            $this->name = $persons_name;
         }

         public function get_name() {
            return $this->name;
         }

         // protected methods and properties restrict access to 
         // those elements.
         protected function set_name($new_name) {
             if ($this->name !=  "Jimmy Two Guns") {
                $this->name = strtoupper($new_name);
             } 
         }
    } 

    // 'extends' is the keyword that enables inheritance
    class employee extends person 
    {
        protected function set_name($new_name) {
            if ($new_name ==  "Stefan Sucks") {
                $this->name = $new_name;
            }
            else if ($new_name ==  "Johnny Fingers") {
                person::set_name($new_name);
            } 
          }

        function __construct($employee_name) 
        {
            $this->set_name($employee_name);
        }
    }
?>

…允许您专门指定要PHP搜索方法的类:

:: …告诉PHP在person::set_name()类中搜索set_name()。

如果您只想引用当前班级的父级,也可以使用person关键字。

代码:

parent