?
Solved

how does local variables know costtype=2 instantly

Posted on 2014-04-30
6
Medium Priority
?
196 Views
Last Modified: 2014-04-30
<?php
abstract class Lesson {
    protected $duration;
    const     FIXED = 1;
    const     TIMED = 2;
    private   $costtype;

    function __construct( $duration, $costtype=1 ) {
        $this->duration = $duration;
        $this->costtype = $costtype;
    }

    function cost() {
        switch ( $this->costtype ) {
            CASE self::TIMED :
                return (5 * $this->duration);
                break;
            CASE self::FIXED :
                return 30;
                break;
            default:
                $this->costtype = self::FIXED;
                return 30;
        }
    }

    function chargeType() {
        switch ( $this->costtype ) {
            CASE self::TIMED :
                return "hourly rate";
                break;
            CASE self::FIXED :
                return "fixed rate";
                break;
            default:
                $this->costtype = self::FIXED;
                return "fixed rate";
        }
    }

    // more lesson methods...
}

class Lecture extends Lesson {
    // Lecture-specific implementations ...
}

class Seminar extends Lesson {
    // Seminar-specific implementations ...
}

$lecture = new Lecture( 51, Lesson::FIXED );
print "{$lecture->cost()} ({$lecture->chargeType()})\n"; 

$seminar= new Seminar( 4, Lesson::TIMED );
print "{$seminar->cost()} ({$seminar->chargeType()})\n"; 
?>

Open in new window


look at the call stack
line55
$seminar= new Seminar( 4, Lesson::TIMED );
enters constructor line8
    function __construct( $duration, $costtype=1 ) {
and the local variables know that $costtype is 2 before any if statement

I could understand
if parameter2:
costtype=2,
then
set costtype=2


how does local variables know costtype=2 instantly
0
Comment
Question by:rgb192
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
6 Comments
 
LVL 17

Expert Comment

by:jrm213jrm213
ID: 40032270
Hi,

The local variables know because it was passed in as a parameter. In the Constructor

 function __construct( $duration, $costtype=1 )

$duration is a required parameter.
$costtype is an optional parameter,if you don't send a value for the parameter it will be set to 1.

So
$seminar= new Seminar( 4, Lesson::TIMED );
sets the second parameter, $costtype to 2

$seminar= new Seminar( 4, Lesson::FIXED);
sets the $costtype to 1 however, you could just call
$seminar= new Seminar( 4);
and get the same result...
0
 
LVL 31

Expert Comment

by:Marco Gasi
ID: 40032407
No points for this: it's only to clarify what jrm213jrm213 correctly said.

Lesson::TIMED sets the second parameter to 2 because TIMED is a constant you define at the beginning of your class setting its value to 2

abstract class Lesson {
    protected $duration;
    const     FIXED = 1;
    const     TIMED = 2;

Open in new window

0
 

Author Comment

by:rgb192
ID: 40032682
How are constants known outside class?
And how can seminar be called with
Only 1 parameter
0
7 Extremely Useful Linux Commands for Beginners

Just getting started with Linux? Here's a quick start guide that has 7 commands that we believe will come in handy.

 
LVL 31

Assisted Solution

by:Marco Gasi
Marco Gasi earned 1000 total points
ID: 40032690
Yyou call them as parameter of a descendant class of Lesson, that is  Seminar: being Seminar a descendant of Lesson, it knows everything which is not private of the ancestor class.
0
 
LVL 17

Accepted Solution

by:
jrm213jrm213 earned 1000 total points
ID: 40032726
Hi,
How are constants known outside class?
The constants are within the class

abstract class Lesson {
    protected $duration;
    const     FIXED = 1;
    const     TIMED = 2;
    private   $costtype;

Open in new window



FIXED and TIMED are constant variables of the Lesson class.

And how can seminar be called with Only 1 parameter

When you create an instance of the class Seminar, it should run the parent constructor since it doesn't have one of it's own. Yhe constructor of the Lesson class takes 1 required parameter $duration and 1 optional parameter $costtype. So if you only supply 1 parameter when you create an instance of the Seminar class

$seminar= new Seminar(4);

the required parameter $duration will receive that value (4) and the optional parameter $costtype will be set to it's default value, which is 1.

see on php.net: http://www.php.net/manual/en/functions.arguments.php#functions.arguments.default
0
 

Author Closing Comment

by:rgb192
ID: 40033618
thanks


FIXED and TIMED are constant variables of the Lesson class.
1 required parameter $duration and 1 optional parameter

 parameter of a descendant class of Lesson, that is  Seminar: being Seminar a descendant of Lesson, it knows everything which is not private of the ancestor class.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this. Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it i…
Many old projects have bad code, but the budget doesn't exist to rewrite the codebase. You can update this code to be safer by introducing contemporary input validation, sanitation, and safer database queries.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question