ID: 21745 User updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Bogus Bug Type: Scripting Engine problem Operating System: windows95 PHP Version: 4.3.0 New Comment:
<?php // =================== // copyright statements // he he he :) :) // =================== /* function a($param=null){ $fd = fopen('thefilename.php', 'rb'); $content = fread($fd, 93); fclose($fd); if(md5($content) == 'c38627d91179b94fdd75faa36c8796df'){ function aa(){ echo 'aa() ok'; } } else { function aa(){ echo 'who tell u to modify copyright?<br>'; echo 'i will report u to the police'; } } } a(); aa(); */ ?> this may not relevant, but since i am trying to secure my application... hence maybe ur people can try too! this idea will prevent people [lots of people out there] to erase the copyright.. and the creator information :) Previous Comments: ------------------------------------------------------------------------ [2003-01-19 09:18:43] [EMAIL PROTECTED] /* i try oop before, but here are the reasons. */ class a{ var $country; function a(){ $this->country = array('Malaysia', 'Singapore', 'Japan'); } function aa(){ // after some ...process here..., return Malaysia return $this->country[0]; } } /* $c = new a(); print_r($GLOBALS); fail because, it treats class in the global scope. maybe u say it is because it is constructor; [c] => a Object ( [country] => Array ( [0] => Malaysia [1] => Singapore [2] => Japan ) ) */ // ok, try another class b{ function bb(){ $this->money = array('ringgit', 'dollar', 'yen'); } } /* the result will be the same, because it appears in global scope */ // this time, we use function function a(){ return new a(); } function aa(){ $a = new a(); return $a->aa(); } // OR function c($param=null){ $a = new a(); switch($param){ case 'aa': return $a->aa(); //.... case ... more for every object method... :( } } /* this works, because it is inside the function. hence, in order to secure that object, we need to write a wrapper using function for that object... or just use it inside the function. let say now we want to run the aa() method of a object. how? write a new function or using switch()! so after much consideration i think i rather write in functions within functions. and implement my own OOP... :) a function as a data storage for all function where function needs to verify themselves before getting or setting data using the storage function. */ ------------------------------------------------------------------------ [2003-01-19 07:29:34] [EMAIL PROTECTED] Well, it's just one of the current limitations of PHP, so it is possible that some solution for the issue will be announced in the future. Anyway I think you'd better off doing it object-oriented-wise in this case. And as for the term "bogus", whilst its usage in this bug database is often argued, please note that we don't always mean to be harsh on every report marked so. Thanks Moriyoshi ------------------------------------------------------------------------ [2003-01-19 07:06:44] [EMAIL PROTECTED] function a($param=null){ $fruit[0] = 'apple'; $fruit[1] = 'orange'; switch($param){ case 'R': return $fruit; break; default: function aa(){ $fruit = a('R'); echo in_array('apple', $fruit) ? 'ok' : 'fail'; } function ab(){ $fruit = a('R'); if(in_array('apple', array('apple', 'orange'))){ echo 'ok'; } else { echo 'fail'; } } } } a(); aa(); ab(); //aa(); // echo ok //ab(); // echo ok /* finally, it works like the way i want... :) wondering ? bug : bogus <= should change to 'less experience'; cause i using php less than 3 years... :) sorry. anyway, i learn that file a.php ========== function a(){ $a = 'php'; function ab(){ echo $a; // doesn't work } } i understand that global apple is the $GLOBALS['apple'] and i thought by using the global here, it would maybe means the scope of function a(). anyway, i am wrong about that.. you might be wondering why i created a function like this? em... this is to prevent the use of vars in the $GLOBALS scope why, because i am writing a secure application. if a people include a.php, then using the $GLOBALS, he can find out what value in the vars. anyway, i also think how to prevent people to include the a.php or calling a()... emm... maybe u people can help me next time... bogus = [adj] derog pretended; intentionally false: <= from dictionary. so u see, i am not intended to fool ur people... so the status shouldn't be bogus... i am learning and ur people are teaching... :) May Allah bless all of us!. sincerely, Jimson Chang */ ------------------------------------------------------------------------ [2003-01-19 06:10:20] [EMAIL PROTECTED] Sorry, my assumption wasn't right at all. The error is because $fruit is not initialised in the global scope. Try the following: <?php function a(){ global $fruit; $fruit[0] = 'apple'; $fruit[1] = 'orange'; function aa(){ global $fruit; (array) $fruit; echo in_array('apple', $fruit) ? 'ok' : 'fail'; } function ab(){ global $fruit; if(in_array('apple', array('apple', 'orange'))){ echo 'ok'; } else { echo 'fail'; } } } a(); aa(); ab(); ?> ------------------------------------------------------------------------ [2003-01-19 05:54:40] [EMAIL PROTECTED] This problem turned out to be a problem of the scripting engine, rather than of in_array(), that "global" declarations don't work in nested functions. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/21745 -- Edit this bug report at http://bugs.php.net/?id=21745&edit=1