Passing Boolean to a Function

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Greg Scharlemann

    Passing Boolean to a Function

    I'm having an issue passing a boolean to the constructor of an object.
    For some reason, if I pass false into the constructor, it doesn't
    register. If I pass an integer 0, it does. PHP 5 Code below:

    ---------------------
    class Test {
    var $testBool;

    public function __construct($te stBool) {
    print "testBool = $testBool";
    }
    }

    $testing = new Test(false); // this just prints "testBool = "

    $testing = new Test(0); // this prints "testBool = 0"

    --------------------
    Seems to be both methods should print 0 or false. What have I missed?

  • flamer die.spam@hotmail.com

    #2
    Re: Passing Boolean to a Function

    hmm I think you may need to use 'null' rather than false.

    Flamer.


    Greg Scharlemann wrote:
    I'm having an issue passing a boolean to the constructor of an object.
    For some reason, if I pass false into the constructor, it doesn't
    register. If I pass an integer 0, it does. PHP 5 Code below:
    >
    ---------------------
    class Test {
    var $testBool;
    >
    public function __construct($te stBool) {
    print "testBool = $testBool";
    }
    }
    >
    $testing = new Test(false); // this just prints "testBool = "
    >
    $testing = new Test(0); // this prints "testBool = 0"
    >
    --------------------
    Seems to be both methods should print 0 or false. What have I missed?

    Comment

    • David Haynes

      #3
      Re: Passing Boolean to a Function

      Greg Scharlemann wrote:
      I'm having an issue passing a boolean to the constructor of an object.
      For some reason, if I pass false into the constructor, it doesn't
      register. If I pass an integer 0, it does. PHP 5 Code below:
      >
      ---------------------
      class Test {
      var $testBool;
      >
      public function __construct($te stBool) {
      print "testBool = $testBool";
      }
      }
      >
      $testing = new Test(false); // this just prints "testBool = "
      >
      $testing = new Test(0); // this prints "testBool = 0"
      >
      --------------------
      Seems to be both methods should print 0 or false. What have I missed?
      >
      What are you expecting the print of true and false to produce?
      Also, var is deprecated in PHP5.

      Try this class to see what is really happening.
      <?php
      class Test {
      private $testBool;

      public function __construct($te stBool) {
      printf("Test constructed with testBool = %s\n", $testBool ? 'true' :
      'false');
      }
      }

      $testing = new Test(true);
      $testing = new Test(false);
      ?>

      -david-

      Comment

      • Chung Leong

        #4
        Re: Passing Boolean to a Function

        Greg Scharlemann wrote:
        Seems to be both methods should print 0 or false. What have I missed?
        The fact that false becomes an empty string when casted to string.

        For debugging it's better to use var_dump($var).

        Comment

        • Kimmo Laine

          #5
          Attention Flamer! (Was: Passing Boolean to a Function)

          <die.spam@hotma il.comwrote in message
          news:1152490344 .038778.285330@ m79g2000cwm.goo glegroups.com.. .
          hmm I think you may need to use 'null' rather than false.
          >

          Flamer

          I'm sure everyone here appreciates your enthusiasm, but on more than one
          occasions I've noticed that your answers have very little or nothing to do
          with the questions. I don't mean to be offensive, but if you really don't
          know what the answer is, it would be best not to answer, rather than guess
          something. Not answering is better than confusing even more the person who
          is asking something. For example in this case using 'null' isn't going to
          solve anything, it's a case of how booleans are cast to strings compared to
          how integers are.

          I don't want you to stop posting here, what I'd like you to do is think for
          a while before each posting, is this answer really helpful, accurate, and
          more than a hunch. If not, don't worry, someone else may have the right
          answer. We're not here to compete who answers the most posts fastest, but to
          really help people who have difficulties and need help (that is: not random
          guessing) and I wish you and everyone else here realizes that.

          --
          "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
          spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)


          Comment

          • Chung Leong

            #6
            Re: Attention Flamer! (Was: Passing Boolean to a Function)

            Kimmo Laine wrote:
            <die.spam@hotma il.comwrote in message
            news:1152490344 .038778.285330@ m79g2000cwm.goo glegroups.com.. .
            hmm I think you may need to use 'null' rather than false.
            >
            >
            Flamer
            >
            I'm sure everyone here appreciates your enthusiasm, but on more than one
            occasions I've noticed that your answers have very little or nothing to do
            with the questions. I don't mean to be offensive, but if you really don't
            know what the answer is, it would be best not to answer, rather than guess
            something. Not answering is better than confusing even more the person who
            is asking something. For example in this case using 'null' isn't going to
            solve anything, it's a case of how booleans are cast to strings compared to
            how integers are.
            >
            I don't want you to stop posting here, what I'd like you to do is think for
            a while before each posting, is this answer really helpful, accurate, and
            more than a hunch. If not, don't worry, someone else may have the right
            answer. We're not here to compete who answers the most posts fastest, but to
            really help people who have difficulties and need help (that is: not random
            guessing) and I wish you and everyone else here realizes that.
            >
            --
            "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
            spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)
            One thing I have noticed is that Diet Dr. Pepper really doesn't taste
            like regular Dr. Pepper.

            Comment

            • Greg Scharlemann

              #7
              Re: Passing Boolean to a Function

              David Haynes wrote:
              Also, var is deprecated in PHP5.
              Thanks!
              Your test case also worked... but I'm going to make my question a
              little more complicated...

              That boolean value is going to be written to a MySQL database. I've set
              the column to be of type Bool (which appears to turn into a
              Tinyint(1)), is that the best approach? Should I use enum('true',
              'false') or some other approach?

              Second, since the values get screwed up when cast to a String, should I
              just go around the true/false nominclature and use 1/0?

              Finally, another somewhat semi-related newbie question. I come from a
              java background with getter and setter methods. I modified the Test
              class David created with what I thought is a getter method, however it
              doesn't work... The function just prints: "()" PHP is not as straight
              forward as I hoped...

              <?php
              class Test {
              private $testBool;

              public function __construct($te stBool) {
              printf("Test constructed with testBool = %s\n",
              $testBool ? 'true' :
              'false');
              }

              public function getTestBool() {
              return "$testBool" ;
              }

              }
              $testing = new Test(true);
              $testing = new Test(false);
              print "testing->getTestBool( ) = $testing->getTestBool()" ;
              ?>

              Comment

              • David Haynes

                #8
                Re: Passing Boolean to a Function

                Greg Scharlemann wrote:
                David Haynes wrote:
                >Also, var is deprecated in PHP5.
                Thanks!
                Your test case also worked... but I'm going to make my question a
                little more complicated...
                >
                That boolean value is going to be written to a MySQL database. I've set
                the column to be of type Bool (which appears to turn into a
                Tinyint(1)), is that the best approach? Should I use enum('true',
                'false') or some other approach?
                I would translate the 0/1 from MySQL into true/false at the lowest level
                I could. It's not all that hard to unroll it as follows:

                $result = mysqli_query($s ql);
                while( $row = mysql_fetch_ass oc($result) ) {
                $isArchived = $row['is_archived'] ? true : false;
                ...
                }

                NOTE: Since you are familiar with Java, the use of isXxx should be very
                familiar to you.
                Second, since the values get screwed up when cast to a String, should I
                just go around the true/false nominclature and use 1/0?
                There are at least two ways to handle this:
                1. create your own class to handle the 1/0 to true/false mapping
                2. provide a toString() method for the boolean value in a class
                >
                Finally, another somewhat semi-related newbie question. I come from a
                java background with getter and setter methods. I modified the Test
                class David created with what I thought is a getter method, however it
                doesn't work... The function just prints: "()" PHP is not as straight
                forward as I hoped...
                >
                <?php
                class Test {
                private $testBool;
                >
                public function __construct($te stBool) {
                printf("Test constructed with testBool = %s\n",
                $testBool ? 'true' :
                'false');
                }
                >
                public function getTestBool() {
                return "$testBool" ;
                }
                >
                }
                $testing = new Test(true);
                $testing = new Test(false);
                print "testing->getTestBool( ) = $testing->getTestBool()" ;
                ?>
                Getters and setters (or more formally, accessors and mutators) are fully
                supported in PHP. What you have here is another example of trying to
                print FALSE as a string (which maps to the null string).

                So, let's play with the code a bit...
                <?php
                class Test {
                // holds the boolean value - could be protected instead
                private $testBool;

                // constructor
                public function __construct($te stBool) {
                $this->testBool = $testBool;
                }

                // accessor
                public function getTestBool() {
                return $this->testBool;
                }

                // mutator
                public function setTestBool($te stBool) {
                $this->testBool = $testBool;
                }

                // toString
                public function toString() {
                return $this->testBool ? 'true' : 'false';
                }

                // isTrue
                public function isTrue() {
                return ($this->testBool == true);
                }
                }

                // constructor
                $my_test = new Test(true);

                // accessor
                if( $my_test->getTestBool( ) == true ) {
                printf("getTest Bool returned true\n");
                }

                // mutator
                $my_test->setTestBool(fa lse);

                // toString
                printf('testBoo l is %s\n', $my_test->toString());

                // isTrue
                if( $my_test->isTrue() ) {
                printf('isTrue returned true\n');
                } else {
                printf('isTrue returned false\n');
                }
                ?>

                You can add your own toMySQL() and setTestBoolFrom MySQL() if you want.

                -david-

                Comment

                • Greg Scharlemann

                  #9
                  Re: Passing Boolean to a Function

                  There are at least two ways to handle this:
                  1. create your own class to handle the 1/0 to true/false mapping
                  2. provide a toString() method for the boolean value in a class
                  I like the toString() method approach. Good call.
                  So, let's play with the code a bit...
                  Great example! Thank you so much for your help.

                  Comment

                  • Richard Levasseur

                    #10
                    Re: Attention Flamer! (Was: Passing Boolean to a Function)


                    Kimmo Laine wrote:
                    <die.spam@hotma il.comwrote in message
                    news:1152490344 .038778.285330@ m79g2000cwm.goo glegroups.com.. .
                    hmm I think you may need to use 'null' rather than false.
                    >
                    >
                    Flamer
                    >
                    I'm sure everyone here appreciates your enthusiasm, but on more than one
                    occasions I've noticed that your answers have very little or nothing to do
                    with the questions. I don't mean to be offensive, but if you really don't
                    know what the answer is, it would be best not to answer, rather than guess
                    something. Not answering is better than confusing even more the person who
                    is asking something. For example in this case using 'null' isn't going to
                    solve anything, it's a case of how booleans are cast to strings compared to
                    how integers are.
                    >
                    I don't want you to stop posting here, what I'd like you to do is think for
                    a while before each posting, is this answer really helpful, accurate, and
                    more than a hunch. If not, don't worry, someone else may have the right
                    answer. We're not here to compete who answers the most posts fastest, but to
                    really help people who have difficulties and need help (that is: not random
                    guessing) and I wish you and everyone else here realizes that.
                    >
                    --
                    "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
                    spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)

                    Ohhh, burned.

                    I'll be here all night, folks.

                    Comment

                    • Rik

                      #11
                      Re: Passing Boolean to a Function

                      David Haynes wrote:
                      Greg Scharlemann wrote:
                      >David Haynes wrote:
                      >>Also, var is deprecated in PHP5.
                      >Thanks!
                      >Your test case also worked... but I'm going to make my question a
                      >little more complicated...
                      >>
                      >That boolean value is going to be written to a MySQL database. I've
                      >set the column to be of type Bool (which appears to turn into a
                      >Tinyint(1)), is that the best approach? Should I use enum('true',
                      >'false') or some other approach?
                      >
                      I would translate the 0/1 from MySQL into true/false at the lowest
                      level I could. It's not all that hard to unroll it as follows:
                      >
                      $result = mysqli_query($s ql);
                      while( $row = mysql_fetch_ass oc($result) ) {
                      $isArchived = $row['is_archived'] ? true : false;
                      ...
                      }

                      $isArchived = (bool)$row['isarchived'];
                      it's shorter, and by using $row['is_archived'] ? you're already evaluating
                      the boolean value.




                      Grtz,
                      --
                      Rik Wasmus


                      Comment

                      • Kimmo Laine

                        #12
                        Re: Passing Boolean to a Function

                        "Greg Scharlemann" <greg.scharlema nn@gmail.comwro te in message
                        news:1152569290 .266969.99400@7 5g2000cwc.googl egroups.com...
                        Finally, another somewhat semi-related newbie question. I come from a
                        java background with getter and setter methods. I modified the Test
                        class David created with what I thought is a getter method, however it
                        doesn't work... The function just prints: "()" PHP is not as straight
                        forward as I hoped...
                        print "testing->getTestBool( ) = $testing->getTestBool()" ;
                        ?>
                        This is evaluated actually like this would be :
                        'testing->getTestBool( ) = '.$testing->getTestBool.'( )';

                        and since you have not property getTestBool, $testing->getTestBool returns
                        nothing. therefore it's "testing->getTestBool( ) = ".[nothing]."()"; that's
                        why it prints only the empty parenthesis.

                        Functions are not executed within strings (you'd have to be using eval but
                        you don't want that). So you need to execute the getter method outside the
                        string:

                        print "testing->getTestBool( ) = " . $testing->getTestBool( );

                        --
                        "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
                        spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)


                        Comment

                        • David Haynes

                          #13
                          Re: Passing Boolean to a Function

                          Rik wrote:
                          David Haynes wrote:
                          >$result = mysqli_query($s ql);
                          >while( $row = mysql_fetch_ass oc($result) ) {
                          >$isArchived = $row['is_archived'] ? true : false;
                          >...
                          >}
                          >
                          >
                          $isArchived = (bool)$row['isarchived'];
                          it's shorter, and by using $row['is_archived'] ? you're already evaluating
                          the boolean value.
                          >
                          >

                          >
                          Grtz,
                          Rik,
                          $row['isarchived'] is already a 0/1 value (Tinyint(1)), so really the
                          (bool) cast is a no-op. My bad. You could just use $isArchived =
                          $row['isarchived']

                          -david-

                          Comment

                          • Rik

                            #14
                            Re: Passing Boolean to a Function

                            David Haynes wrote:
                            Rik wrote:
                            >David Haynes wrote:
                            >>$result = mysqli_query($s ql);
                            >>while( $row = mysql_fetch_ass oc($result) ) {
                            >>$isArchived = $row['is_archived'] ? true : false;
                            >>...
                            >>}
                            >>
                            >>
                            >$isArchived = (bool)$row['isarchived'];
                            >it's shorter, and by using $row['is_archived'] ? you're already
                            >evaluating
                            >the boolean value.
                            >>
                            >>
                            >>
                            http://www.php.net/manual/en/languag...oolean.casting
                            >>
                            >Grtz,
                            >
                            Rik,
                            $row['isarchived'] is already a 0/1 value (Tinyint(1)), so really the
                            (bool) cast is a no-op. My bad. You could just use $isArchived =
                            $row['isarchived']
                            What do you mean by no-op? I'm no native speaker, please explain. And
                            already 0/1? 0/1 is an integer, not a boolean.

                            <?php
                            $row['test'] = 1; //so, integer 1, can be cast to true
                            $istrue = (bool)$row['test'];
                            echo '$row[test] can be cast to ';
                            echo ($row['test'])?'true':'false ';
                            $string = "\n%s is %sa boolean";
                            printf($string, '$row[test]',($row['test']===true)? '' :'not ');
                            printf($string, '$istrue',($ist rue===true)? '' :'not ');
                            ?>

                            Grtz,
                            --
                            Rik Wasmus


                            Comment

                            • Jerry Stuckle

                              #15
                              Re: Passing Boolean to a Function

                              Rik wrote:
                              David Haynes wrote:
                              >
                              >>Rik wrote:
                              >>
                              >>>David Haynes wrote:
                              >>>
                              >>>>$result = mysqli_query($s ql);
                              >>>>while( $row = mysql_fetch_ass oc($result) ) {
                              >>>>$isArchiv ed = $row['is_archived'] ? true : false;
                              >>>>...
                              >>>>}
                              >>>
                              >>>
                              >>>$isArchive d = (bool)$row['isarchived'];
                              >>>it's shorter, and by using $row['is_archived'] ? you're already
                              >>>evaluating
                              >>>the boolean value.
                              >>>
                              >>>
                              >>>
                              >

                              >
                              >>>Grtz,
                              >>
                              >>Rik,
                              >>$row['isarchived'] is already a 0/1 value (Tinyint(1)), so really the
                              >>(bool) cast is a no-op. My bad. You could just use $isArchived =
                              >>$row['isarchived']
                              >
                              >
                              What do you mean by no-op? I'm no native speaker, please explain. And
                              already 0/1? 0/1 is an integer, not a boolean.
                              >
                              <?php
                              $row['test'] = 1; //so, integer 1, can be cast to true
                              $istrue = (bool)$row['test'];
                              echo '$row[test] can be cast to ';
                              echo ($row['test'])?'true':'false ';
                              $string = "\n%s is %sa boolean";
                              printf($string, '$row[test]',($row['test']===true)? '' :'not ');
                              printf($string, '$istrue',($ist rue===true)? '' :'not ');
                              ?>
                              >
                              Grtz,
                              Rik,

                              No-Op is from Assembler - "No Operation", although it is more correctly
                              referred to as "noop". It's an instruction which does nothing but take
                              time and memory. Useful when you need to delay a couple of CPU cycles
                              for something else to occur.

                              And you are correct - the (bool) is needed if you want the value to be a
                              boolean. However, if you're only going to test it, you could leave it
                              as an integer 1/0 instead of true/false; the result would be the same.

                              Personally I prefer the boolean. But that's only my preference; in most
                              cases there's no technical reason to choose one over the other.

                              --
                              =============== ===
                              Remove the "x" from my email address
                              Jerry Stuckle
                              JDS Computer Training Corp.
                              jstucklex@attgl obal.net
                              =============== ===

                              Comment

                              Working...