05. marts 2006 - 00:20
Der er
18 kommentarer og 1 løsning
Åbne klasserne automatisk
Jeg ønsker et script som henter alle filer fra en mappe vha. php.net/glob - herefter skal den åbne disse filer, som indeholder en masse klasser. Filerne i mappen hedder class.{name}.php. Scriptet skal så automatisk udføre følgende: ${name} = new ucfirst( {name} ); Sig til hvis det ikke er forståligt :-D
Annonceindlæg fra QNAP
05. marts 2006 - 00:28
#1
I dit eksempel hedder klassen "ucfirst" - så det er vel det filen også hedder? Jeg forstår ikke rigtig dit {name} som parameter? Skal den søge filen igennem og "åbne" de klasser der er brug for? Så det må vel være "Ikke forstået" :)
05. marts 2006 - 00:31
#2
Jeg har ikke testet, men måske noget i denne stil: <?php foreach (glob("*.php") as $filename) { if (preg_match('/class\\.(.+?)\\.php/', $filename, $name)) { require($filename); ${$name[1]} = new ucfirst({$name[1]}); } } ?>
05. marts 2006 - 00:37
#3
Jeg prøvede lige lidt selv :) foreach( glob( $_SERVER['DOCUMENT_ROOT'] . /classes/class.*.php ) as $file ) { if( !eregi( $_SERVER['SCRIPT_NAME'], $file ) ) { if( preg_match_all ("/<h1>(.+?)<\/h1>/is", $file, $classNames ) ) { foreach( $classNames[1] as $className ) { $className = new ucfirst( $className ); } } } }
05. marts 2006 - 00:44
#4
jakobdo -> din melder fejl. jeg har prøvet lidt mere - men det virker stadig ikke :P foreach( glob( $_SERVER['DOCUMENT_ROOT'] . "/classes/class.*.inc" ) as $file ) { if( !eregi( $_SERVER['SCRIPT_NAME'], $file ) ) { if( preg_match_all( "/class\ (?)/", $file, $classNames ) ) { foreach( $classNames[1] as $className ) { ${$className} = new ucfirst( {$className} )"; } } else { echo "indeholder ikke nogle klasser"; } } }
05. marts 2006 - 00:49
#5
foreach( glob( $_SERVER['DOCUMENT_ROOT'] . "/classes/class.*.inc" ) as $file ) { if( preg_match_all( "/class\\.(.+?)\\.inc/", $file, $classNames ) ) { foreach( $classNames[1] as $className ) { echo '${$className} = new ' . ucfirst( $className ) . ";<br />"; } } } den udskriver følgende: ${$className} = new Database; ${$className} = new Failure; ${$className} = new Users; -- så det er tæt på :D
05. marts 2006 - 00:50
#6
Prøv at ret: ' til "
05. marts 2006 - 00:51
#7
Og du skal vel også have: echo "${$className} = new " . ucfirst( $className ) . "();<br />";
05. marts 2006 - 00:52
#8
jeg kan virkelig ikke regne ud hvordan man definerer de variabler ordentligt :S foreach( glob( $_SERVER['DOCUMENT_ROOT'] . "/classes/class.*.inc" ) as $file ) { if( preg_match_all( "/class\\.(.+?)\\.inc/", $file, $classNames ) ) { foreach( $classNames[1] as $className ) { ${$className} = new ucfirst( $className ); } } }
05. marts 2006 - 00:59
#9
foreach( glob( $_SERVER['DOCUMENT_ROOT'] . "/classes/class.*.inc" ) as $file ) { if( preg_match_all( "/class\\.(.+?)\\.inc/", $file, $classNames ) ) { foreach( $classNames[1] as $className ) { echo "$$className = new " . ucfirst( $className ) . ";<br />"; } } } det script udskriver: $database = new Database; $failure = new Failure; $users = new Users; -- det er præcist det jeg ønsker, men det skal blot ekserveres som php-kode - så jeg kan bruge variablerne :]
05. marts 2006 - 01:01
#10
Ved ikke om du kan lave: eval("$$className = new " . ucfirst( $className ) . "()");
05. marts 2006 - 01:03
#11
jeg tror at eval gør præcist det modsatte. at den forhindrer serveren i at ekservere det som php-kode.. men er ikke sikker. -- det virker i hvert fald ikke :D
05. marts 2006 - 01:07
#12
eval() evaluates the string given in code_str as PHP code. Among other things, this can be useful for storing code in a database text field for later execution.
05. marts 2006 - 10:21
#13
nå ok :] jeg er kommet frem til følgende: $already_defined = get_declared_classes(); foreach( glob( "classes/class.*.inc" ) as $file ) include( $file ); $defined_afterwards = get_declared_classes(); foreach(array_diff($defined_afterwards, $already_defined ) as $className ) { echo "$", $className, " = new ", ucfirst( $className ), ";"; }
05. marts 2006 - 16:55
#14
Det her virker hos mig: <?php //http://www.eksperten.dk/spm/692675 foreach (glob("*.php") as $filename) { if (preg_match('/class\\.(.+?)\\.php/', $filename, $name)) { require($filename); $str = '$var' . $name[1] . ' = new ' . ucfirst($name[1]) . '();'; eval($str); echo $str . "<br>"; } } ?> og jeg har lavet 2 filer med class'er i: class.class1.php <?php class Class1 { function Class1($text="CLASS1") { echo $text; } } ?> class.class2.php <?php class Class2 { function Class2($text="CLASS2") { echo $text; } } ?>
05. marts 2006 - 17:43
#15
kanon. smid et svar jakobdo
05. marts 2006 - 18:06
#16
hov. ikke den tråd. skulle have været til coderdk undskyld forstyrrelsen
07. marts 2006 - 22:07
#17
øh. >_< jakobdo -> læg et svar
08. marts 2006 - 07:29
#18
Svar!
15. marts 2006 - 15:07
#19
Takker for point!
Vi tilbyder markedets bedste kurser inden for webudvikling