Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 初学者。。。对同一函数中的同名变量感到困惑 1_Php_Oop_Boolean - Fatal编程技术网

Php 初学者。。。对同一函数中的同名变量感到困惑 1

Php 初学者。。。对同一函数中的同名变量感到困惑 1,php,oop,boolean,Php,Oop,Boolean,它不是布尔值。这是默认值。所以,如果您调用不带参数的函数,它会将$userId视为” 注=是赋值运算符,=是比较运算符 问题1:$userID作为可选参数传递给类的构造函数。这意味着您可以使用或实例化此类的对象,而无需传递用户id: 例如: 问题2:$userID在第5行是一个类属性。可以使用$this->userID从第12行的构造函数访问它$第10行中的userID仅存在于函数内部。这不是一个布尔参数,而是一个默认值为空字符串的参数。如果您没有设置默认值,并且实例化了这个类中的一个对象,它

它不是布尔值。这是默认值。所以,如果您调用不带参数的函数,它会将
$userId
视为


=
是赋值运算符,
=
是比较运算符

问题1:
$userID
作为可选参数传递给类的构造函数。这意味着您可以使用或实例化此类的对象,而无需传递用户id:
例如:



问题2:$userID在第5行是一个类属性。可以使用
$this->userID
从第12行的构造函数访问它$第10行中的userID仅存在于函数内部。

这不是一个布尔参数,而是一个默认值为空字符串的参数。如果您没有设置默认值,并且实例化了这个类中的一个对象,它将抛出一个错误,因为缺少一个参数

不,它们不一样。一个是对象变量,另一个是参数变量

注意:这段代码很旧(var关键字,everything是public等)

好的

  • 不是每次“创建新类”时都使用该方法,每次实例化对象时都会调用它,这意味着每次调用
    new ClassName()
    语句时都会调用该方法。之所以使用
    function\uu构造($userID='')
    ,而不是
    function\uu构造($userID)
    ,是因为我们想给它一个默认值。这意味着用户可以调用
    newapc()
    newapc(“userID”)
  • 不可以。第5行声明的是一个对象属性,它是每个对象中存在的一个变量(这意味着如果实例化2个APC类,则创建的每个对象将有一个变量,总共2个)。
    第8行是一个函数参数。当使用参数(
    new APC(“userID”)
    )调用该方法时,该参数将存储在函数内部的该变量中。
    巧合的是,他们俩的名字都一样
  • 一,

    二,

    $this->userID表示“从第5行读取变量”

    第10行=第8行

    $这是ACL类的当前(从内部)副本(实例)


    他没有使用另一个词,因为这是为了传达这样一个信息:在新ACL()中的()之间放置的任何内容都将成为ACL副本(实例)中的$this->userID

    你为什么认为它是布尔型的?它甚至默认为一个空字符串,那么为什么你要假设它是一个布尔变量呢?只是一个旁注,它是
    \uuuu construct()
    而不是
    \uu constructor()
    。最好找一个不混合PHP4和PHP5的教程。。。一个好的PHP5教程将为$perms、$userID和$userRoles分配“可见性”,而不是简单地使用“var”@Tom,谢谢。这是一个较老的教程,但我一直在使用_construct()。@MarkBaker,谢谢你指出这一点。我只是用“public”而不是“var”来养成分配“可见性”的习惯,但我肯定在寻找新的PHP5教程。我还学到了很多东西。哇,我觉得自己很笨。我需要去睡觉了。。我把它读作布尔值,甚至没有把它读作分配给空字符串的变量。谢谢,我在问题1上犯了一个错误。关于问题2,可以肯定地说,第5/12/15行中的userID是相同的,第10/12行中的userID只存在于函数内部,是其他内容。可以将其重命名为$abcdef,这样就不会有问题了?事实上,它们都被称为userID,这让我很困惑。如果使用$this->userID,第5行中的$userID只能从函数内部访问。函数中名为$userID的所有内容都可以重命名为您想要的任何内容,并且不会影响任何内容。现在,这非常有意义。谢谢peter。这是我能找到的唯一一个完整的登录系统教程,有完整的解释和源代码,但它是从2008年或2009年开始的。我不确定哪些元素需要更改为private或protected,因为var与public是一样的。但我想我得改天再学。谢谢你澄清了第二个问题。啊,是的,这就是我说的“开一门新课”的意思。我的意思是使用类ACL并实例化它,然后“创建”该类的新对象。我的失误。对你答案的回应:1)呼呼呼呼。我现在明白了。想要给它一个默认值,并且能够调用APC()或新的APC(“userID”)。。说得很清楚。非常感谢。2) 谢谢你澄清这一点。这让我想问,使用相同的“名称”是否被视为不好的编码习惯,例如在本例中,编码器使对象属性和函数参数都是相同的东西?还是很常见?我知道在非常小的构造函数中(即只设置变量,不采取任何进一步的操作),我通常使用相同名称的变量。在事情可能变得棘手的情况下。我对参数和属性使用不同的名称。谢谢,该睡觉了!关于他为什么用同一个词的好消息,我不知道。
     1   <?php  
     2   class ACL  
     3   {  
     4       var $perms = array();        //Array : Stores the permissions for the user  
     5       var $userID = 0;            //Integer : Stores the ID of the current user  
     6       var $userRoles = array();    //Array : Stores the roles of the current user  
     7 
     8       function __constructor($userID = '')  
     9       {  
     10           if ($userID != '')  
     11          {  
     12               $this->userID = floatval($userID);  
     13           } else {  
     14               $this->userID = floatval($_SESSION['userID']);  
     15          }  
     16           $this->userRoles = $this->getUserRoles('ids');  
     17           $this->buildACL();  
     18       }  
    
    $acl = new ACL(); //valid
    $acl = new ACL($aUersId); // also valid
    
    function helloWorld($whattosay = 'Hello World') {
         echo $whattosay;
    }
    
    helloWorld()
    // prints Hello World
    
    helloWorld("kthxbai")
    // prints kthxbai