Cast class

Door Iltar van der berg, 19 jaar geleden, 4.913x bekeken

Hele simpele class om strings te casten.

Gebruik V1.1:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$binair = 'hoi';
Cast::binary($binair);

$bool = 'false';
if(Cast::bool($bool) === false)) {}

$number = 'dg62631';
$number = Cast::int($number);
//etc


V 1.0 initial release

V 1.1 maakt nu gebruik van pass by reference (Jelmer)

TODO:
momenteel gebruik je het als:
$string = Cast::string($string);
Wat ik wil is dat
Cast::string($string);
$string meteen cast naar een string



NOT A BUG!:
return (version_compare(PHP_VERSION, '6.0.0dev', '>=')) ? (binary) sprintf('%b', $input) : (int) sprintf('%b', $input);

Weet je zeker dat je php 5 gebruikt, verander het dan naar:
return (int) sprintf('%b', $input);
Weet je zeker dat je php 6 gebruik, verander het dan naar:
return (binary) sprintf('%b', $input);

Voor optimale snelheid.
Bied je het aan in een systeem zoals ik, en je weet niet wat voor versie je klant heeft, laat het dan zo.

Of het werkt in php 4 ? NEE!

Gesponsorde koppelingen

PHP script bestanden

  1. cast-class

 

Er zijn 15 reacties op 'Cast class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Thijs X
Thijs X
19 jaar geleden
 
0 +1 -0 -1
Ik snap het voordeel niet helemaal, de functie typen kost evenveel tijd als (int) ( soms zelfs nog minder ;) )
Je hebt nu gewoon een functie om een functie heen gebouwd.
Jeffrey H
Jeffrey H
19 jaar geleden
 
0 +1 -0 -1
Ik snap ut niet, dit zijn toch gewoon SPL functies??
Edit:
Ik ben het eens met wat thijs zegt...
Jelmer -
Jelmer -
19 jaar geleden
 
0 +1 -0 -1
Niet eens SPL functies, gewoon features van de taal zelf. Wat heeft het precies voor meerwaarde? Edit: Ik zie hem. Dit kan best een mooie oplossing zijn om je functie-argumenten naar een bepaald type te dwingen. Soms nodig. Maar let op, soms. PHP is niet strong typed, en dat zie ik als een voordeel :)

Ow, en voor je TODO dingetje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
static public function string(&$string) {
   return $string = strval($string);
}

?>

Op die manier kan je én de oude manier gebruiken, én de manier die je zelf wou hanteren. Van strval kan je natuurlijk ook nog (string) maken naar eigen voorkeur. Beiden doen volgens mij hetzelfde.
Iltar van der berg
iltar van der berg
19 jaar geleden
 
0 +1 -0 -1
Het idee is dat sprintf dus validaties als scientific en integer/float kan onderscheiden. De rest past er gewoon mooi in.

Het werkt wel lekker moet ik zeggen (heb het nu al meerdere keren gebruikt).
Lode
Lode
19 jaar geleden
 
0 +1 -0 -1
Lekker origineel hoor Iltar ^.^
Ruud Verbij
Ruud Verbij
19 jaar geleden
 
0 +1 -0 -1
grappig, weet niet of ik het ga gebruiken. in ieder geval leuk dat je het plaatst!
misschien dat je nog een mooie exceptie class erbij kan schrijven die casting fouten retourneert ofzo? maakt het weer wat uitgebreider ;)
Paul K
Paul K
19 jaar geleden
 
0 +1 -0 -1
Ik snap echt niet wat het nu precies voor zin heeft om het op deze manier te doen?
Lode
Lode
19 jaar geleden
 
0 +1 -0 -1
Heel simpel...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$init
= microtime(true);
sleep(1);
$end = (microtime(true) - $init); // buggy ;-)

echo $end.' seconds<br/>'.PHP_EOL;

Cast::float($end);

echo $end.' seconds<br/>'.PHP_EOL;
?>


en dan heb je ook nog de dagelijkse 1 === true, 0 === false dingen e.d.

En er staan bovenin ook nog een paar voorbeeldjes...
Gerben G
Gerben G
19 jaar geleden
 
0 +1 -0 -1
Wat een nutteloos script zeg. Of kan iemand mij uitleggen wat de toevoegende waarde van dit script is??
Iltar van der berg
iltar van der berg
19 jaar geleden
 
0 +1 -0 -1
Net wat lode zegt...

Mensen zeggen dat ik nooit mijn meningen onderbouw met argumenten, maar ik wil nu wel is horen waarom het dan waardeloos is...
Storeman storeman
storeman storeman
19 jaar geleden
 
0 +1 -0 -1
Kan best eens van pas komen, inderdaad, een exceptionclass zou nog leuk zijn!

één puntje wat ik persoonlijk anders zou doen:

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
<?php
/**
     * cast to binary
     *
     * @param mixed $input
     * @return int
     */

    static public function binary(&$input)
    {

        return $input = (version_compare(PHP_VERSION, '6.0.0dev', '>='))
                ? (
binary) sprintf('%b', $input)
                : (int)
sprintf('%b', $input);
    }
[
/code]

Zou ik oplossen door interne functies te gebruiken. (Zend studio valt hier over). Dus:

[
code][code]<?php
/**
     * cast to binary
     *
     * @param mixed $input
     * @return int
     */

    static public function binary(&$input)
    {

        return $input = (version_compare(PHP_VERSION, '6.0.0dev', '>='))
                ?
self::binary( sprintf('%b', $input) )
                :
self::int( sprintf('%b', $input) ) ;
    }
[
/code]
Jelmer -
Jelmer -
19 jaar geleden
 
0 +1 -0 -1
Wanneer je self::binary vanuit self::binary aanroept, heb je een interne lus. Daarnaast kan je deze static functies die een reference als argument verwachten niet direct aanroepen met de uitvoer van een functie als argument. Met andere woorden, je argument moet een variabele zijn.
Iltar van der berg
iltar van der berg
19 jaar geleden
 
0 +1 -0 -1
Ik weet niet hoe overloaden precies werkt met php, want met C++ kiest de compiler zelf de goede methode:

Ik zou namelijk elke methode 2 keer erin kunnen zetten, en dan 1 met pass by reference en 1 zonder, mocht php kunnen kiezen.
Lode
Lode
19 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
static public function binary(&$input){
        return $input = (self::float(PHP_VERSION) < 6) ? self::binary( sprintf('%b', $input) ) : self::int( sprintf('%b', $input) ) ;
}

?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jelmer -
Jelmer -
19 jaar geleden
 
0 +1 -0 -1
@Lode: Maak jij nu niet dezelfde fouten als Storeman die ik hier 3 posts hierboven beschreef?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. cast-class

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.