note 86205 added to language.types.type-juggling
| From: | wbcarts at juno dot com | Date: | Wed, 08 Oct 2008 01:05:42 +0000 |
| Subject: | note 86205 added to language.types.type-juggling | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-145149@lists.php.net to get a copy of this message | ||
WHERE'S THE BEEF?
Looks like type-casting user-defined objects is a real pain, and ya gotta be nuttin' less than
a brain jus ta cypher-it. But since PHP supports OOP, you can add the capabilities right now. Start
with any simple class.
<?php
class Point {
protected $x, $y;
public function __construct($xVal = 0, $yVal = 0) {
$this->x = $xVal;
$this->y = $yVal;
}
public function getX() { return $this->x; }
public function getY() { return $this->y; }
}
$p = new Point(25, 35);
echo $p->getX(); // 25
echo $p->getY(); // 35
?>
Ok, now we need extra powers. PHP gives us several options:
A. We can tag on extra properties on-the-fly using everyday PHP syntax...
$p->z = 45; // here, $p is still an object of type [Point] but gains no capability, and
it's on a per-instance basis, blah.
B. We can try type-casting it to a different type to access more functions...
$p = (SuperDuperPoint) $p; // if this is even allowed, I doubt it. But even if PHP lets this
slide, the small amount of data Point holds would probably not be enough for the extra functions to
work anyway. And we still need the class def + all extra data. We should have just instantiated a
[SuperDuperPoint] object to begin with... and just like above, this only works on a per-instance
basis.
C. Do it the right way using OOP - and just extend the Point class already.
<?php
class Point3D extends Point {
protected $z; // add extra properties...
public function __construct($xVal = 0, $yVal = 0, $zVal = 0) {
parent::__construct($xVal, $yVal);
$this->z = $zVal;
}
public function getZ() { return $this->z; } // add extra functions...
}
$p3d = new Point3D(25, 35, 45); // more data, more functions, more everything...
echo $p3d->getX(); // 25
echo $p3d->getY(); // 35
echo $p3d->getZ(); // 45
?>
Once the new class definition is written, you can make as many Point3D objects as you want. Each of
them will have more data and functions already built-in. This is much better than trying to beef-up
any "single lesser object" on-the-fly, and it's way easier to do.
----
Server IP: 69.147.83.197
Probable Submitter: 66.53.213.5
----
Manual Page -- http://www.php.net/manual/en/language.types.type-juggling.php
Edit -- https://master.php.net/note/edit/86205
Del: integrated -- https://master.php.net/note/delete/86205/integrated
Del: useless -- https://master.php.net/note/delete/86205/useless
Del: bad code -- https://master.php.net/note/delete/86205/bad+code
Del: spam -- https://master.php.net/note/delete/86205/spam
Del: non-english -- https://master.php.net/note/delete/86205/non-english
Del: in docs -- https://master.php.net/note/delete/86205/in+docs
Del: other reasons-- https://master.php.net/note/delete/86205
Reject -- https://master.php.net/note/reject/86205
Search -- https://master.php.net/manage/user-notes.php