Hej alle,
Jeg har siddet lidt og leget med php, og jeg savner rigtig meget method overloading i php (som man kender det fra C#, Java etc.) - Der er nogle workarounds, og jeg har kigget lidt på noget i stil med:
- class Test {
- function __call($method, $args)
- {
- //Allowed methods to use
- $methods = array("Get", "Get1", "Get2");
-
-
- //Exception in case the method is not valid
- if(!in_array($method, $methods))
- throw new Exception("Method does not exist");
-
- $cnt_args = count($args);
-
- switch($cnt_args)
- {
- case 0:
- $this->Get();
- break;
- case 1:
- $this->Get1($args[0]);
- break;
- case 2:
- $this->Get2($args[0], $args[1]);
- break;
- default:
- throw new Exception("Something went wrong");
- break;
-
- }
-
- }
-
- function Get(){
- echo "No val";
- }
-
- function Get1($val)
- {
- echo "Val: {$val}";
- }
-
- function Get2($val1, $val2)
- {
- echo "Val: {$val}, Val2: {$val2}";
- }
- }
Problemet for mig er bare, at dette jo ikke rigtig er overloading som jeg vil have det. Så jeg tænker, hvorfor ikke bare lave nogle metoder med forskellige navne, og kalde dem istedet.
Eller laver man en metode med noget som det her:
- function Test($something, $optional = NULL, $optional2 = NULL){
- if($optional != NULL){
- if($optional2 != NULL){
- //do something with $something, $optional and $optional2
- } else {
- //do something with $something and $optional
- }
- } else {
- // Do something with $something only
- }
Hvad er den mest gængse måde at gøre det på? Synes simpelt hen ikke jeg kan finde noget som jeg synes er tilfredsstillende at se på :I