Umfrage: Typ-sicheres PHP durch neue Basis-Typen

Typ-Sicheres PHP?


  • Anzahl der Umfrageteilnehmer
    6

saftmeister

Nutze den Saft!
Hallo,

ich wollte mal fragen, ob ein generelles Interesse besteht, PHP typ-sicher zu bekommen. Ich dachte an Sachen, wie eine Integer-, Double, und String-Klasse. Mit allen nötigen Gimicks wie replace-Methode und diversen anderen Methoden, wie man sie z.B. aus Java kennt.

Alles natürlich nativ in C programmiert als Extension und es wird Sprach-Umfang der PHP-Api verwendet.
 
Schade das die Macher von PHP nicht dich Chancen bzw. vorteile Typensicherer Programierung erkennen und sie in PHP einfließenlassen.
 
Ich will ja nicht zu viel versprechen, aber ich hab damit natürlich schon angefangen. Bisher kann meine String-Klasse

Code:
PHP_METHOD(String, __construct);
PHP_METHOD(String, __toString);
PHP_METHOD(String, charat);
PHP_METHOD(String, hashcode);
PHP_METHOD(String, length);
PHP_METHOD(String, substring);
PHP_METHOD(String, tolower);
PHP_METHOD(String, toupper);
PHP_METHOD(String, format);
PHP_METHOD(String, replace);

Der Code dafür kommt irgendwann demnächst auf Github, allerdings will ich noch verbessern und erweitern. Also diese Sachen hier gehen schon:

Code:
=====================================================================
TIME START 2013-01-03 23:34:13
=====================================================================
PASS Basic enterprise extension test [tests/ep001.phpt] 
PASS Echo String object test [tests/ep002.phpt] 
PASS String substr test [tests/ep003.phpt] 
PASS String case test [tests/ep004.phpt] 
PASS String hash code test [tests/ep005.phpt] 
PASS String format test [tests/ep006.phpt] 
PASS String replacement test [tests/ep007.phpt] 
=====================================================================
TIME END 2013-01-03 23:34:13

=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped    :    0
Exts tested     :   29
---------------------------------------------------------------------

Number of tests :    7                 7
Tests skipped   :    0 (  0.0%) --------
Tests warned    :    0 (  0.0%) (  0.0%)
Tests failed    :    0 (  0.0%) (  0.0%)
Expected fail   :    0 (  0.0%) (  0.0%)
Tests passed    :    7 (100.0%) (100.0%)
---------------------------------------------------------------------
Time taken      :    0 seconds
=====================================================================

Besonders cool finde ich den hier:

Code:
--TEST--
String replacement test
--FILE--
<?php
$s = new String("Hello world!");
$s2 = $s->replace('/world/', 'you');
var_dump($s);
var_dump($s2);
?>
--EXPECT--
object(String)#1 (1) {
  ["value":protected]=>
  string(12) "Hello world!"
}
object(String)#2 (1) {
  ["value":protected]=>
  string(10) "Hello you!"
}

Allerdings hat die Sache einen Haken, es ist etwas langsamer als der funktionale Weg mittels preg_replace(), obwohl intern die gleiche Funktion (php_pcre_replace()) verwendet wird. Man wird also noch optimieren können/müssen/sollen.
 
Nein, SPL ist auch in C. Und das SPL auch Datentypen unterstützt war mir neu. Allerdings bringen die "nur" den Typen als Klasse. Keine Methoden, die man mit den Strings machen könnte. Also muss man doch wieder abstrahieren. Warum dann nicht gleich die Methoden in C implementieren... Zu dem kommt da noch eine Klasse "Thread" dazu ;-)
 
Mal ne ganz billige Frage, die leider "3 Ebenen" unter den von mir benutzen Sprachbereich fallen... Wie bekomm ich diese nativen C-extensions jetzt eigentlich in mein PHP rein. Ich benutze XAMPP, muss ich php jetzt atsächlich komplett neu kompilieren?

Spl Types habe ich hier heruntergeladen: http://pecl.php.net/package/SPL_Types
 
Eigentlich sollte SPL schon im Sprachumfang von PHP dabei sein. Schau doch mal in phpinfo() nach SPL bzw. verwende get_declared_classes(), ob da SPLInt usw. auftauchen.

Ist das nicht der Fall, müsste man die Extension (nicht PHP selbst) kompilieren. Allerdings müsste das Kompilat die Quell-Dateien der PHP-Version verwenden, die du bei dir laufen hast.

EDIT: OK, anscheinend ist SPL und SPL_Types zwei verschiedene Paar Schuhe und SPL_Types ist nicht dabei. Muss man wohl selbst kompilieren (die Extension).
 
Zuletzt bearbeitet:
SPL Types ist allerdings ein Addon, das nicht im normalen Kern enthalten ist ;)
Als version habe ich PHP 5.4.4 am laufen.
 
Zurück