[PHP] 1 linijka zamiast 3 |
[PHP] 1 linijka zamiast 3 |
18.10.2022, 09:28:29
Post
#1
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Hej
Zmieniłem bibliotekę do komunikacji mojego skryptu PHP z Mikrotikiem z https://github.com/EvilFreelancer/routeros-api-php na https://github.com/BenMenking/routeros-api Wcześniej posługiwałem się takim kodem do odczytu:
Teraz w przykładzie znalazłem:
Jak ten drugi kod przerobić żeby też mieścił się w jednej linijce? -------------------- |
|
|
18.10.2022, 09:45:15
Post
#2
|
|
Grupa: Zarejestrowani Postów: 343 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Nie przerobisz tego na jednolinijkowca, bo metoda `write` nie zwraca obieku, a jedynie typ prosty: bool.
Z resztą, ja osobiście nie widzę potrzeby. Tak jak jest, jest czytelniej, a dla interpretera i tak ta różnica jest niezauważalna. Max co można zrobić, to tak:
Z kodu klasy wynika jeszcze, że możesz po prostu zrobić takie coś:
I też będzie działać jak powyżej. Ten post edytował Salvation 18.10.2022, 09:56:16 |
|
|
18.10.2022, 09:52:24
Post
#3
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
$client jest u Ciebie instancją klasy, która odwołuje się do różnych metod: $client->write($patch), $client->read itd. Po co chcesz to łączyć w jedna linijkę?
Nie da się podmienić obiektu $client na write($patch) bo to już nie będzie instancja i dostaniesz masę błędów. Ewentualnie jak napisał @Salvation Ten post edytował gino 18.10.2022, 09:52:43 |
|
|
18.10.2022, 09:56:53
Post
#4
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Z resztą, ja osobiście nie widzę potrzeby. A ja mam to w 26 miejscach w kodzie i wolałbym poprawić to jednym regexpem zamiast ręcznie. Ale skoro nie ma możliwości to ok:) -------------------- |
|
|
18.10.2022, 09:59:45
Post
#5
|
|
Grupa: Zarejestrowani Postów: 343 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
|
|
|
18.10.2022, 10:07:38
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Jak ci ta jedna linijka jest potrzebna do regexpa to
$client->write('/system/identity/print'); $parsedResponse = $client->read(); I masz jedna linijke -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
18.10.2022, 10:14:44
Post
#7
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Tylko, że ja tak za bardzo nie umiem w programwanie obiektowe Czytałem poradniki, robiłem kursy ale nic. Może jakiś gotowiec na tym przykładzie by mnie oświecił?
Jak ci ta jedna linijka jest potrzebna do regexpa to $client->write('/system/identity/print'); $parsedResponse = $client->read(); I masz jedna linijke Zamieniłem ale wyszło coś takiego:
a chodziło by mi o to, żeby pod zmiennymi $users, $dns i $ntp_serv pojawiła się już sparsowana odpowiedź. Dlatego tak zależy mi na "jednej linijce". Ten post edytował KR2615 18.10.2022, 10:15:36 -------------------- |
|
|
18.10.2022, 11:26:04
Post
#8
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Najprościej dopisz w klasie RouterosAPI metodę np. clientConnect(string $patch) i wrzuć w nią kod, który masz w pierwszym poście, coś takiego:
Kod public function connectClient(string $patch) { $this->write($patch); return $this->parseResponse($this->read(false)); } i będziesz miał jedną linijkę w stylu: Kod $identity = $client->connectClient('/system/identity/print'); zmieniając sobie ścieżkę jak Ci się podoba. |
|
|
18.10.2022, 12:35:24
Post
#9
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Fajnie, dzięki, o to właśnie mi chodziło!
-------------------- |
|
|
18.10.2022, 13:01:32
Post
#10
|
|
Grupa: Zarejestrowani Postów: 343 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Nie nalezy edytować plików źródłowych. Teraz wyobraź sobie, że robisz update biblioteki i wszystkie Twoje zmiany idą się paść na zieloną łączkę...
Dlatego napisałem, byś obudował bibliotekę własną abstrakcją. Korzystasz z composera może? |
|
|
18.10.2022, 13:13:36
Post
#11
|
|
Grupa: Zarejestrowani Postów: 319 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
dlatego napisałem najprościej a nie najlepiej i to chyba jest logiczne. Ucięło mi też z jakiegoś powodu resztę posta, bo pisałem, żeby zrobił jak radzisz, albo napisał własne rozszerzenie klasy i podałem tam też przykład.
Ten post edytował gino 18.10.2022, 13:14:19 |
|
|
18.10.2022, 18:25:01
Post
#12
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Korzystasz z composera może? W tym rozwiązaniu nie. Poprzednią bibliotekę ładowałem composerem:
-------------------- |
|
|
18.10.2022, 18:44:18
Post
#13
|
|
Grupa: Zarejestrowani Postów: 343 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
To pamiętaj o zmianach jakie wykonałeś przy update'cie biblioteki.
|
|
|
20.10.2022, 15:55:10
Post
#14
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Nie dotykałem biblioteki bo już kiedyś brutalnie się przekonałem, co to znaczy updatować biblioteki, zmieniać strukturę danych itp na przykładzie LMSa (Lan Management System), że wyszła mi z niego kompletnie osobna gałąź i nie mogłem w łatwy sposób korzystać z feature'ów wprowadzanych przez Twórców. Wszystko zrobiłem w "mojej" części kodu.
Działa dokładnie tak, jakbym chciał. Dzięki wszystkim za pomoc! ---------------- Jeszcze jedno pytanie w tym samym temacie. Dostaję od urządzenia taką odpowiedź:
Jak za pomocą kodu php znaleść nazwę interfejsu (ether2) na którym jest IP 10.9.4.209 ? -------------------- |
|
|
20.10.2022, 21:02:24
Post
#15
|
|
Grupa: Zarejestrowani Postów: 343 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
|
|
|
21.10.2022, 16:29:57
Post
#16
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Przeczytałem dokumentację, przejżałem przykłady ale nadal nie przychodzi mi do głowy pomysł, jak rozwiązać to zadanie.
-------------------- |
|
|
21.10.2022, 20:38:39
Post
#17
|
|
Grupa: Zarejestrowani Postów: 343 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Demo: https://3v4l.org/EYugm Ten post edytował Salvation 21.10.2022, 20:39:06 |
|
|
21.10.2022, 22:21:41
Post
#18
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Dzięki, działa! Sam bym tego lepiej nie wykonał ani nawet lepiej nie nazwał : )
Edit: Po dodaniu
taki fragment kodu:
wyrzuca: Cytat ncaught TypeError: strpos() expects parameter 1 to be string, null given in.... Ten post edytował KR2615 21.10.2022, 23:52:59 -------------------- |
|
|
22.10.2022, 08:07:38
Post
#19
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
N $values[1] jest NULLem a nie tekstem. Pomysl co z tym fantem teraz zrobic
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.10.2022, 09:07:58
Post
#20
|
|
Grupa: Zarejestrowani Postów: 311 Pomógł: 13 Dołączył: 7.05.2007 Ostrzeżenie: (0%) |
Już wczoraj pomyślałem i stworzyłem warunek
ale chyba ze zmęczenia nie zauważyłem, że chodzi o parametr pierwszy a nie drugi (albo coś mi się pomyliło i sobie ubzdurałem, ze parametry funkcji w PHP też są numerowane od 0 : ) W każdym razie prawidłowe rozwiazanie brzmi: Dzięki za nakierowanie! Pozdrawiam -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 18:23 |