Ad blocker detected: Our website is made possible by displaying online advertisements to our visitors. Please consider supporting us by disabling your ad blocker on our website.
C++ JAVA
-
vasilev
- Потребител

- Posts: 663
- Joined: Sat Feb 07, 2009 12:41 pm
-
Answers: 25
- Location: Everywhere
-
Contact:
Post
by vasilev » Thu Jan 14, 2021 8:20 pm
Здравейте,
правя rest api по логика:
Code: Select all
switch ($_GET["p"]){
case add: class::function().
...
опитвам се да вкарам динамично тези функции в array:
Code: Select all
$arr=array(
"add"=>Class1::add(),
"read"=>Class2::read(),
);
switch ($_GET["p"]){
foreach($arr as $k=>$v){
case $k: ${v}; break;
}
default: echo "ok";
}
имате ли идеи как това да проработи

-
Ticketa
- Турист

- Posts: 599
- Joined: Mon Feb 27, 2012 1:54 pm
-
Answers: 24
- Location: in /root
-
Contact:
Post
by Ticketa » Thu Jan 14, 2021 8:44 pm
Code: Select all
<?php
$x=array(
0 => 'foo',
1 => 'bar',
2 => 'foobar'
);
$y = 'foo';
foreach ($x as $i) {
switch($i){
case $y:
print 'Variable $x tripped switch: '.$i.'<br>';
break;
}
}
?>
-
vasilev
- Потребител

- Posts: 663
- Joined: Sat Feb 07, 2009 12:41 pm
-
Answers: 25
- Location: Everywhere
-
Contact:
Post
by vasilev » Thu Jan 14, 2021 9:20 pm
това и аз го намерих само че идеята тук е друга.
имаш някакъв параметър и го взимаш с GET. правиш case този параметър - да вика друга static function.
искам да постигна нещо от сорта:
Code: Select all
class foo{
public static function bar(){
echo "ok";
}
}
class foo2{
public static function bar2(){
echo "ok2";
}
}
class foo3{
public static function bar3(){
echo "ok3";
}
}
$x=array(
"foo" => foo::bar(),
"foo2" => foo2::bar2(),
"foo3" => foo3::bar3(),
);
$y = $_GET["page"];
foreach ($x as $k=>$i) {
switch($k){
case $y:
$i;
break;
}
}
-
anonimen
- Web-tourist

- Posts: 1607
- Joined: Mon Jun 11, 2012 6:07 pm
-
Answers: 165
- Location: Parse error: unexpected "}" in /home/index.php on line 26
Post
by anonimen » Thu Jan 14, 2021 9:34 pm
Хей така можеш да си го направиш - само трябва да сложиш класа и името на функцията като отделни елементи на списък за всеки ключ в $arr:
Code: Select all
<?php
class Class1 { static function addMethod() { echo "Class1::add() called!\n"; } }
class Class2 { static function readMethod() { echo "Class2::read() called\n"; } }
$arr=array(
"add" => [Class1::class, "addMethod"],
"read"=> [Class2::class, "readMethod"],
);
$keys = ["add", "non-existing", "read"];
$key = $_GET['p'];
if(array_key_exists($key, $arr)) {
call_user_func($arr[$key]);
} else {
echo "default, nothing called";
}
Ето демо с няколко ключа, за да видиш как работи:
https://www.ideone.com/8FGlSY
ПП. Оправих го да не хвърля предупреждения поради употребата на Class1 и Class2 "на голо".
-
marko_krastec
- Нов

- Posts: 1
- Joined: Thu Jan 14, 2021 9:33 pm
Post
by marko_krastec » Thu Jan 14, 2021 9:49 pm
Code: Select all
<?php
class foo
{
public static function bar()
{
echo "ok";
}
}
class foo2
{
public static function bar2()
{
echo "ok2";
}
}
class foo3
{
public static function bar3()
{
echo "ok3";
}
}
$x = array(
"foo" => function () {foo::bar();},
"foo2" => function () {foo2::bar2();},
"foo3" => function () {foo3::bar3();}
);
$page = $_GET["page"];
if (isset($_GET['page'])) {
$page = $_GET['page'];
if(isset($x[$page])){
$x[$page]();
exit;
}
}
die('404 page not found');
-
vasilev
- Потребител

- Posts: 663
- Joined: Sat Feb 07, 2009 12:41 pm
-
Answers: 25
- Location: Everywhere
-
Contact:
Post
by vasilev » Thu Jan 14, 2021 9:56 pm
Да.. И аз така тъкмо направих с key exist
Благодаря .. И двата отговора са ок !
-
vasilev
- Потребител

- Posts: 663
- Joined: Sat Feb 07, 2009 12:41 pm
-
Answers: 25
- Location: Everywhere
-
Contact:
Post
by vasilev » Fri Jan 15, 2021 10:47 am
стигнах до извода че това което искам да направя май не е толкова лесно

обеснявам:
Code: Select all
$tst=array(
"test"=>function () {foo1::bar1();},
"test2"=>function () {foo2::bar2();},
);
class Foo{
public static function bar(){
global $tst;
print_r($tst);
}
}
Foo::bar();
array_push($tst,array("test3"=>function () {foo3::bar3();}));
имаме array с описание на други функции .
искам в някакъв момент да добавя нови записи в този array. въпросът е че всички php класове се зареждат автоматично без някаква подретба .
тоест аз няма как да окажа - първо array_push, след това да викна този foo:bar() който ще извика този array.
-
Revelation
- Web-tourist

- Posts: 922
- Joined: Sun Mar 24, 2013 1:23 pm
-
Answers: 65
Post
by Revelation » Sun Jan 17, 2021 12:45 am
vasilev wrote: ↑Fri Jan 15, 2021 10:47 am
стигнах до извода че това което искам да направя май не е толкова лесно

обеснявам:
Code: Select all
$tst=array(
"test"=>function () {foo1::bar1();},
"test2"=>function () {foo2::bar2();},
);
class Foo{
public static function bar(){
global $tst;
print_r($tst);
}
}
Foo::bar();
array_push($tst,array("test3"=>function () {foo3::bar3();}));
имаме array с описание на други функции .
искам в някакъв момент да добавя нови записи в този array. въпросът е че всички php класове се зареждат автоматично без някаква подретба .
тоест аз няма как да окажа - първо array_push, след това да викна този foo:bar() който ще извика този array.
По-лесно е да кажеш идеята си вместо да ни кажеш какъв метод се опитваш да имплементираш. След този
global дето използва в класа се съмнявам да си в права посока.
-
anonimen
- Web-tourist

- Posts: 1607
- Joined: Mon Jun 11, 2012 6:07 pm
-
Answers: 165
- Location: Parse error: unexpected "}" in /home/index.php on line 26
Post
by anonimen » Sun Jan 17, 2021 8:52 am
vasilev wrote: ↑Fri Jan 15, 2021 10:47 am
искам в някакъв момент да добавя нови записи в този array. въпросът е че всички php класове се зареждат автоматично без някаква подретба .
тоест аз няма как да окажа - първо array_push, след това да викна този foo:bar() който ще извика този array.
Тази част и аз не я разбрах, може ли пак
