Bulgaria PHP Conference
add a note add a note

User Contributed Notes 4 notes

up
46
Anonymous
3 years ago
The keyword 'use' has two different applications, but the reserved word table links to here.

It can apply to namespace constucts:

file1:
<?php namespace foo;
  class
Cat {
    static function
says() {echo 'meoow';}  } ?>

file2:
<?php namespace bar;
  class
Dog {
    static function
says() {echo 'ruff';}  } ?>

file3:
<?php namespace animate;
  class
Animal {
    static function
breathes() {echo 'air';}  } ?>

file4:
<?php namespace fub;
  include
'file1.php';
  include
'file2.php';
  include
'file3.php';
  use
foo as feline;
  use
bar as canine;
  use
animate;
  echo \
feline\Cat::says(), "<br />\n";
  echo \
canine\Dog::says(), "<br />\n";
  echo \
animate\Animal::breathes(), "<br />\n"?>

Note that
felineCat::says()
should be
\feline\Cat::says()
(and similar for the others)
but this comment form deletes the backslash (why???)

The 'use' keyword also applies to closure constructs:

<?php function getTotal($products_costs, $tax)
    {
       
$total = 0.00;
       
       
$callback =
            function (
$pricePerItem) use ($tax, &$total)
            {
               
               
$total += $pricePerItem * ($tax + 1.0);
            };
       
       
array_walk($products_costs, $callback);
        return
round($total, 2);
    }
?>
up
-3
Ronald W
1 month ago
<?php
// multiple namespaces in a single file:

namespace foo{
  class
Cat {
    static function
says() {echo 'meoow';}  }
}

namespace
bar{
  class
Dog {
    static function
says() {echo 'ruff';}  } 
  class
Cat {
    static function
says() {echo 'meowi';}  }
  class
Mouse {     //nonstatic function
   
function says() {echo 'Come and get me ;)';}  }
}

namespace
animate{
  class
Animal {
    static function
breathes() {echo 'air';}  }
}

namespace{       
// No Namespace: global code
 
use foo as feline;
  use
bar as canine;
  use
bar\Mouse as MouseOnly;
  use
animate;
  echo
animate\Animal::breathes(), "<br />\n"
  echo
feline\Cat::says(), "<br />\n"; //not starting with a slash!
 
echo canine\Cat::says(), "<br />\n";
  echo
canine\Dog::says(), "<br />\n";
 
//any of the three following lines work:
  // $micky=new bar\Mouse();
  // $micky=new canine\Mouse();
 
$micky=new test();
  echo
$micky->says();
}
?>
up
-35
php at lanar dot com dot au
1 year ago
Be warned that it is not trivial to convert a project to use namespaces. If you add the same namespace to the top of all your files, your application will break.
All objects in the global namespace, such as ArrayObject, must have a backslash (\) prepend to them.
If you use get_class() and instanceof, you will have to make adjustments here to.
If you have an autoloader, you will need to change its behavior.
It can be done, but subtle errors can creep in and are tedious to rectify.
up
-89
guido at go-mobile dot be
1 year ago
Strange, it worked only when I removed the backslash before feline.
So like this is OK : echo feline\Cat::says()
To Top