PHP hacken/uitbereiden - feedback

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Dos Moonen

Dos Moonen

17/11/2013 19:05:07
Quote Anchor link
Ik wilde wat meer weten over hoe PHP 'under the hood' werkt. Als projectje besloot ik een toevoeging voor type hinting te schrijven.
Het komt neer op het 'Boxing based' voorbeeld uit nikic's Scalar type hinting is harder than you thinkScalar type hinting is harder than you think blog post. Maar dan zonder het automatische unboxing.

https://github.com/Darsstar/php-src/tree/wrap-scalars-on-object-typehint

De volgende code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

use SPL\Type\Hint;

class Number implements Hint\Long, Hint\Double
{

    private $value;

    public function __construct($value)
    {

        $this->value = $value;
    }


    public function wrap($value)
    {

        if ( ! is_long($value) && ! is_double($value))
        {

            throw InvalidArgumentException('Parameter 1 must be a long of double');
        }


        $this->value = $value;
    }


    public function unwrap()
    {

        $this->value;
    }
}

function
foo(Number $bar = 2.0) {
    var_dump($bar);
}


echo '<pre>' . PHP_EOL;

foo(42);
foo(3.1415);
foo();
foo(new Number(12358));

?>

Geeft de volgende output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<pre>
object(Number)#1 (1) {
  ["value":"Number":private]=>
  int(42)
}
object(Number)#1 (1) {
  ["value":"Number":private]=>
  float(3.1415)
}
object(Number)#1 (1) {
  ["value":"Number":private]=>
  float(2)
}
object(Number)#1 (1) {
  ["value":"Number":private]=>
  int(12358)
}


De volgende stap is een 2 of 3 standaard implementaties in de namespaces SPL\Type\Strict, SPL\Type\Cast en mogelijk SPL\Type die niets forceerd maar wel E_STRICT errors gooit?

Ik vroeg me af wat anderen er van vinden, en of jullie grappige use cases kunnen bedenken.
 
PHP hulp

PHP hulp

26/04/2024 00:54:34
 
Wouter J

Wouter J

17/11/2013 20:20:54
Quote Anchor link
Ziet er wel grappig uit :) HackPHP heeft ook al een typehinting van PHP gemaakt.

Waar kan ik de code hiervan vinden? Het enige wat ik van jouw in die repo kan vinden zijn 2 lege files...
 
Dos Moonen

Dos Moonen

17/11/2013 20:28:06
Quote Anchor link
Als je op 10,000+ commits klikt zie je de andere commit in de lijst staan.

Edit: hmm... nog een commit toegevoegd. Vreemd dat die fix verdwenen was.
Edit 2: Voor die mensen die zich afvragen waarom ik dat een fix noem, het is ook echt een bugfix. Zoek naar uninitialized pointers als je meer wilt weten :p
Gewijzigd op 17/11/2013 21:05:00 door Dos Moonen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.