hack — συγκεντρωτικός οδηγός — DedSec Project
hack — συγκεντρωτικός οδηγός Hack Διαφορά από την PHP Η Hack είναι γλώσσα με ελέγχους τύπων στο οικοσύστημα HHVM. Ένα αρχείο με <?hh δεν είναι πρόγραμμα για PHP CLI· η εκτέλεση με php δεν…
Hack
Διαφορά από την PHP
Η Hack είναι γλώσσα με ελέγχους τύπων στο οικοσύστημα HHVM. Ένα αρχείο με <?hh δεν είναι πρόγραμμα για PHP CLI· η εκτέλεση με php δεν αποτελεί δοκιμή της Hack. Ο type checker απορρίπτει ασύμβατους τύπους, αλλά κανόνες όπως «ο αριθμός να μην είναι αρνητικός» απαιτούν ξεχωριστό έλεγχο.
Μικρό εργαστήριο για ρυθμισμένο έργο HHVM
Αποθήκευσε ως lesson.hack. Το <<__EntryPoint>> δηλώνει τη συνάρτηση εκκίνησης. Έλεγξε την έκδοση HHVM και τις ρυθμίσεις του έργου πριν επιλέξεις εντολή εκτέλεσης.
<?hh
function double_positive(int $n): int {
if ($n < 0) {
throw new \InvalidArgumentException('negative');
}
return $n * 2;
}
<<__EntryPoint>>
function main(): void {
echo double_positive(4), "\n";
try {
double_positive(-1);
} catch (\InvalidArgumentException $_) {
echo "rejected\n";
}
}
Αναμενόμενη έξοδος, χωρίς εκτέλεση εδώ: 8 και έπειτα rejected. Ο τύπος int δεν εγγυάται μη αρνητική τιμή· αυτή η απαίτηση επιβάλλεται από τον έλεγχο μέσα στη συνάρτηση.
Διάγνωση προβλημάτων
- PHP parse error: χρησιμοποιείται λάθος runtime. Επιβεβαίωσε ότι το αρχείο Hack εκτελείται από HHVM.
- Σφάλμα τύπου για string: αυθαίρετο κείμενο δεν ικανοποιεί παράμετρο
int. Κάνε μετατροπή και επικύρωση στο όριο εισόδου, όχι πρόχειρο cast που κρύβει το πρόβλημα. - Unhandled InvalidArgumentException: αποφάσισε αν ο καλών πρέπει να χειριστεί, να μεταφράσει ή να προωθήσει την εξαίρεση. Απόφυγε γενικά
catchπου κρύβουν άλλες αστοχίες. - Απουσία entry point ή λάθος έργο: εξέτασε
.hhconfig, έκδοση HHVM και εντολή εκκίνησης. Τα διαθέσιμα εργαλεία διαφέρουν ανά έκδοση. - Ασυμβατότητα εξαρτήσεων: η Hack/HHVM δεν υποστηρίζει αυτόματα κάθε σύγχρονο πακέτο PHP.
Διαδρομή κατάκτησης
- Με πραγματικά εργαλεία Hack, σημείωσε εκδόσεις HHVM και type checker, εκτέλεσε το πρόγραμμα και κράτησε τις δύο γραμμές εξόδου.
- Άλλαξε προσωρινά την πρώτη κλήση σε
double_positive("4"), πρόβλεψε το σφάλμα τύπου και επανέφερε ακέραιο όρισμα. - Έλεγξε μηδέν, ένα και αρνητικό αριθμό. Εξήγησε γιατί η μη αρνητικότητα είναι κανόνας κατά την εκτέλεση και όχι εγγύηση του
int. - Σύγκρινε εξαίρεση και ρητή αναπαράσταση αποτελέσματος για API που καλεί άλλο πρόγραμμα. Τεκμηρίωσε πώς γίνεται η ανάκαμψη από αποτυχία.
Επαλήθευση: μόνο στατική ανασκόπηση εδώ· το HHVM δεν είναι εγκατεστημένο. Μην δηλώσεις επιτυχημένη εκτέλεση χωρίς πραγματικό έλεγχο. Πηγή: https://docs.hhvm.com/hack/
Hack — Αναλυτικός οδηγός εξάσκησης
Πραγματικό αρχικό δείγμα
<?hh
<<__EntryPoint>>
function main(): void {
echo "Hello, Ada!\n";
}
Περιβάλλον: Run with HHVM in a configured Hack project.. Επιβεβαίωσε ότι έχεις το σωστό compiler, host ή simulator πριν θεωρήσεις την έξοδο αξιόπιστη. Για scripts με πρόσβαση σε προσωπικά αρχεία ή ρυθμίσεις, χρησιμοποίησε προσωρινά και read-only δεδομένα.
Συγκεκριμένος στόχος υλοποίησης
Χρησιμοποίησε typed collections και shape για JSON-like input στη Hack. Σύγκρινε nullable types και runtime checks του HHVM.
Κρίσιμο λάθος που πρέπει να αναγνωρίζεις
Η Hack/HHVM δεν είναι απλή PHP 8· έλεγξε typed mode και διαθέσιμο HHVM.
Hack — Διαδρομή ουσιαστικής εξάσκησης
Πρακτικές εργασίες
- Φτιάξε προσβάσιμη φόρμα με ετικέτα και μήνυμα σφάλματος.
- Μοντελοποίησε ένα αίτημα και απάντηση μέσω HTTP API ή προσομοιωτή.
- Απόρριψε λανθασμένη είσοδο και κωδικοποίησε το κείμενο πριν την εισαγωγή σε HTML.
Ερωτήσεις ουσίας
- Πού περνά η είσοδος χρήστη ένα όριο εμπιστοσύνης;
- Ποια εργαλεία εκτελούν ή ελέγχουν το παράδειγμα και σε ποια έκδοση;
- Ποιο είναι το μικρότερο ελεγμένο πρόγραμμα; Ποιες είναι οι παρενέργειες;
- Πώς γίνεται διάκριση μεταξύ σφάλματος σύνταξης, λογικής και περιβάλλοντος;
- Πώς δοκιμάζονται άκυρα δεδομένα χωρίς βλάβη σε αρχεία ή σύστημα;