Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 327
  • Last Modified:

I do not understand calling sale function of new product

<?php
require_once( "closures.php" );

$logger = create_function( '$product', 
                           'print "    logging ({$product->name})\n";' );

$processor = new ProcessSale();
$processor->registerCallback( $logger );

$processor->sale( new Product( "shoes", 6 ) );
print "\n";
$processor->sale( new Product( "coffee", 6 ) );
?>

Open in new window


closures.php
<?php

class Product {
    public $name;
    public $price;
    function __construct( $name, $price ) {
        $this->name = $name;
        $this->price = $price;
    }
}

class ProcessSale {
    private $callbacks;

    function registerCallback( $callback ) {
        if ( ! is_callable( $callback ) ) {
            throw new Exception( "callback not callable" );
        }
        $this->callbacks[] = $callback;
    }

    function sale( $product ) {
        print "{$product->name}: processing \n";
        foreach ( $this->callbacks as $callback ) {
            call_user_func( $callback, $product );
        }
    }
}
?>

Open in new window



I do not understand calling sale function of new product

$processor->sale( new Product( "shoes", 6 ) );
0
rgb192
Asked:
rgb192
  • 4
  • 2
1 Solution
 
gr8gonzoConsultantCommented:
What specifically do you not understand about it?

To be clear, the sale function does not belong to the new product. The sale function belongs to the $processor object, and the code is creating a new product object and passing that new product as a parameter to the $processor's sale function.
0
 
rgb192Author Commented:
Calling 2 methods at the same time
0
 
rgb192Author Commented:
I do not understand calling two classes at the same time.

Sale method of new product
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
gr8gonzoConsultantCommented:
This code:
$processor->sale( new Product( "shoes", 6 ) );

...could be rewritten as two lines:

$temporary_variable = new Product( "shoes", 6 );
$processor->sale( $temporary_variable );

The only difference is that the "new Product" part is created in memory and is passed immediately to the sale function and there is no $temporary_variable or other variable to reference it outside of the function.
0
 
rgb192Author Commented:
okay same output but easier to understand

//$processor->sale( new Product( "shoes", 6 ) );
$temporary_variable=new Product("shoes", 6);
$processor->sale($temporary_variable);



Next part of sale function I do not understand is the foreach
this run was value lambda_8, last run was lambda_8
Only one run in the foreach


what is lambda and why always run once
0
 
rgb192Author Commented:
Yes you answered the question about calling the method.
Thank you.

Second question about this method is:
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_28400934.html
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now